2017-10-12 119 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