【问题标题】:Django Prefetch related queryDjango Prefetch 相关查询
【发布时间】:2017-10-12 13:18:16
【问题描述】:

我有两个模型 Customer 和 Contact 我想将字段从 Contact 模型添加到 Customer 模型并访问它的值。如何解决它? 提前致谢。

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

【问题讨论】:

    标签: django django-queryset


    【解决方案1】:

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

    q = Customer.objects.filter(name='xxx').prefetch_related('contact_set')
    
    for i in q:
        print(i.contact_set.all())
    

    【讨论】:

    • 但我想将联系人模型中的字段添加到客户模型中。该怎么做?
    • 您不能,因为一位客户可能有多个或零个联系人。如果您确定只有一个 - 使用 OneToOne 而不是 ForeignKey。使用当前模型,您可以使用 i.contact_set.first().contact_number 但如果根本没有 Contact 对象,它将失败。它看起来不对,因为您可能会错过其他联系人。
    猜你喜欢
    • 1970-01-01
    • 2014-09-04
    • 2015-09-02
    • 2020-07-16
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 2021-11-15
    • 2018-09-13
    相关资源
    最近更新 更多