Django-SImple在两个表之间左联接



我一直在Stackoverflow上搜索Django的LEFT JOIN,但大多数解决方案都太复杂了。

我的型号:

class Voucher(models.Model):
code = models.CharField(unique=True, max_length=255)
delivery_type = models.CharField(max_length=255)
description = models.CharField(max_length=255, blank=True, null=True)
start_at = models.DateTimeField()
end_at = models.DateTimeField()
discount_type = models.CharField(max_length=255)
discount_amount = models.FloatField(blank=True, null=True)

class VoucherCustomer(models.Model):
voucher_code = models.OneToOneField(Voucher, models.DO_NOTHING, db_column='voucher_code', primary_key=True)
customer_id = models.IntegerField()
times_used = models.BigIntegerField(blank=True, null=True)
created_at = models.DateTimeField(blank=True, null=True)
updated_at = models.DateTimeField(blank=True, null=True)

这就是我尝试的:

from django.db.models.sql.datastructures import Join
#I thought this one is like 
from VoucherCustomer left join Voucher  
on VoucherCustomer.voucher_code = Voucher.code 
j=Join(VoucherCustomer, 'voucher_code', 
Voucher,"LEFT JOIN" ,'code', True)  

j.objects.filter(voucher_code ='SAIGONS247').values('code', 'delivery_type', 'description', 'times_used').values

然而,我最终得到了这样的结果:

AttributeError: 'str' object has no attribute 'get_joining_columns'

如果您有ForeignKey或OneToOne关系,则可以使用双下划线直接访问相关对象的属性。

j = VoucherCustomer.objects.filter(voucher_code__code ='SAIGONS247')
j.values('voucher_code__code', 'voucher_code__delivery_type', 'voucher_code__description', 'times_used')

最新更新