如何在Django ORM中加入条件?

实际上,我需要有条件的 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:通过新的编辑,我收到此错误:

如何在Django ORM中加入条件?

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')))

此查询可进行无尽的加载。

SZLM668 回答:如何在Django ORM中加入条件?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3139471.html

大家都在问