我在payment_source
中有一个SELF JOINed表views.py
的查询
paymentsss = Transaction.objects.all().select_related('currency','payment_source__payer','deal__service__contractor',).filter(
payment_date__range=[date1,date2],).order_by('-id')
哪个会变成:
SELECT "processing"."transaction"."id","processing"."transaction"."currency_id","processing"."transaction"."deal_id","processing"."transaction"."payment_source_id","processing"."transaction"."payment_date","processing"."transaction"."amount","processing"."transaction"."status","processing"."transaction"."context","processing"."currency"."id","processing"."currency"."iso_name","processing"."currency"."minor_unit","processing"."deal"."id","processing"."deal"."service_id","processing"."service"."id","processing"."service"."contractor_id","processing"."service"."name","processing"."service"."description","processing"."contractor"."id","processing"."contractor"."name","processing"."payer_payment_source"."id","processing"."payer_payment_source"."payer_id","processing"."payer_payment_source"."payment_type_id","processing"."payer_payment_source"."source_details",T7."id",T7."payer_id",T7."payment_type_id",T7."source_details"
FROM "processing"."transaction"
LEFT OUTER JOIN "processing"."currency"
ON ("processing"."transaction"."currency_id" = "processing"."currency"."id")
LEFT OUTER JOIN "processing"."deal"
ON ("processing"."transaction"."deal_id" = "processing"."deal"."id")
LEFT OUTER JOIN "processing"."service"
ON ("processing"."deal"."service_id" = "processing"."service"."id")
LEFT OUTER JOIN "processing"."contractor"
ON ("processing"."service"."contractor_id" = "processing"."contractor"."id")
LEFT OUTER JOIN "processing"."payer_payment_source"
ON ("processing"."transaction"."payment_source_id" = "processing"."payer_payment_source"."id")
LEFT OUTER JOIN "processing"."payer_payment_source" T7
ON ("processing"."payer_payment_source"."payer_id" = T7."id")
我想添加条件and
,以获取它:
LEFT OUTER JOIN "processing"."payer_payment_source" T7
ON ("processing"."payer_payment_source"."payer_id" = T7."id"
and T7."payment_type_id" = 'bank_card_details')
models.py
class PayerPaymentsource(models.Model):
id = models.BigIntegerField(blank=True,null=False,primary_key=True)
payer = models.ForeignKey("self",null=True,on_delete=models.CASCADE,)
payment_type = models.ForeignKey(PaymentType,max_length=64,blank=True,on_delete=models.CASCADE)
source_details = models.TextField(blank=True,null=True)
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)
payment_date = models.DateTimeField(blank=True,null=True)
amount = models.IntegerField(blank=True,null=True)
class Meta:
managed = False
db_table = '"processing"."transaction"'
class PaymentType(models.Model):
id = models.CharField(max_length=75,primary_key=True)
name = models.CharField(max_length=128,null=True)
class Meta:
managed = False
db_table = '"processing"."payment_type"'
我该怎么做?
此外,我很高兴收到有关如何通过选择processing.payer_payment_source
和T7
中的字段来删除重复项的建议。