2017-10-12 82 views
0

我有两个模型客户和联系人,我想从Contact模型添加字段到客户模型,并访问它的值。如何解决它? 在此先感谢。Django Prefetch相关查询

models.py

class Customer(models.Model): 
    code = models.CharField(primary_key=True,max_length=30) 
    name = models.CharField(max_length=200) 
    address = models.CharField(max_length=100) 


class Contact(models.Model): 
    partner_name =models.ForeignKey(Customer,blank=True,null=True,on_delete=models.CASCADE) 
    contact_number=models.CharField(max_length=15,blank=True) 
    email=models.EmailField(max_length=50,blank=True) 

我尝试这个查询

q=Customer.objects.filter(name='xxx').prefetch_related('contact_set') 

for i in q: 
print(i.contact_set) 

它返回

partner.Contact.None 
partner.Contact.None 
partner.Contact.None 

回答

2

你必须使用QuerySet.all()获取打印之前数据:

q = Customer.objects.filter(name='xxx').prefetch_related('contact_set') 

for i in q: 
    print(i.contact_set.all()) 
+0

但我想添加字段从联系模式到客户模型。如何做到这一点? –

+0

你不能这样做,因为一个客户可能有几个或零个联系人。如果你确定只有一个 - 使用OneToOne而不是ForeignKey。使用当前模型,您可以使用'i.contact_set.first()。contact_number'但如果根本没有联系人对象,它将失败。它看起来不对,因为你可能会错过其他联系人。 – Igor