实际上,我需要有条件的 self join
。但是没有人回答我这个问题(my question),所以我决定使用两个相同的模型。我需要像这样在连接上添加条件AND
:
LEFT OUTER JOIN "processing"."payer_payment_source" T7
ON ("processing"."payer_payment_source"."payer_id" = T7."payer_id" AND "T7."payment_type_id" = 'bank_card_details)
views.py
paymentsss = Transaction.objects.all().annotate(payment_type=FilteredRelation('payment_source_t',condition=Q(
payment_source__payment_type='bank_card_details')))
我要添加:
"T7."payment_type_id" = 'bank_card_details
models.py
class PayerPaymentsource1(models.Model):
payer_id = models.BigIntegerField(blank=True,null=False,primary_key=True)
payment_type = models.ForeignKey(PaymentType,max_length=64,blank=True,null=True,on_delete=models.CASCADE)
source_details = models.TextField(blank=True,null=True) # This field type is a guess.
class Meta:
managed = False
db_table = '"processing"."payer_payment_source"'
class PayerPaymentsource(models.Model):
id = models.BigIntegerField(blank=True,primary_key=True)
payer = models.ForeignKey(PayerPaymentsource1,on_delete=models.CASCADE)
payment_type = models.ForeignKey(PaymentType,null=True) # This field type is a guess.
class Meta:
managed = False
db_table = '"processing"."payer_payment_source"'
class Transaction(models.Model):
id = models.BigIntegerField(blank=True,primary_key=True)
currency = models.ForeignKey(Currency,on_delete=models.CASCADE)
deal = models.ForeignKey(Deal,on_delete=models.CASCADE)
# service_instance = models.ForeignKey(ServiceInstance,on_delete=models.CASCADE)
payment_source = models.ForeignKey(PayerPaymentsource,on_delete=models.CASCADE,related_name='payment_source_t')
payment_date = models.DateTimeField(blank=True,null=True)
amount = models.IntegerField(blank=True,null=True)
status = models.CharField(max_length=255,null=True)
context = models.TextField(blank=True,null=True)
class Meta:
managed = False
db_table = '"processing"."transaction"'
我该怎么做?
UPD:通过新的编辑,我收到此错误:
UPD2:paymentsss = Transaction.objects.all().select_related('currency','payment_source__payment_type','deal__service__contractor',).annotate(
payment_type_kkk=FilteredRelation('payment_source',condition=Q(
payment_source__payment_type_id='bank_card_details')))
此查询可进行无尽的加载。