我一直在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')