【问题标题】:prefetch_related() ForeignKey reverse lookup in Django?Django 中的 prefetch_related() ForeignKey 反向查找?
【发布时间】:2016-11-18 10:31:59
【问题描述】:

我有两个模型:

class Company(models.Model):
    ...

class Supplier(models.Model):
  company = models.ForeignKey(Company, null=True, related_name="suppliers")

如何获取所有公司及其相关供应商?

我试过了:

Company.objects.prefetch_related('suppliers') 
Company.objects.prefetch_related('supplier_set') 
Company.objects.prefetch_related('suppliers').all()
...

我做错了什么?

谢谢

【问题讨论】:

    标签: django orm foreign-keys foreign-key-relationship


    【解决方案1】:

    prefetch_related just adds the SQL query 获取供应商,这样当您执行company.suppliers.all() 时,您就不会在Company.objects.all() 之上产生另一个 SQL 命中。之后您可以正常访问供应商:

    companies = Company.objects.all().prefetch_related('suppliers')
    
    for company in companies:
        # Does not require a new SQL query
        suppliers = company.suppliers.all()
    

    【讨论】:

    • 有什么方法可以包含额外的 SQL 查询?之后我需要找有供应商的公司在模板中使用它。试过select_related('suppliers'),但我得到:django.core.exceptions.FieldError: Invalid field name(s) given in select_related: 'suppliers'. Choices are: (none)
    • 嗯,这是一个单独的问题。你在Company 上使用select_relatedSupplier 模型上还有 related_name='suppliers' 吗?
    猜你喜欢
    • 2018-10-16
    • 2011-05-09
    • 2023-03-16
    • 2023-01-06
    • 1970-01-01
    • 2020-05-27
    • 2023-03-08
    • 1970-01-01
    • 2022-01-22
    相关资源
    最近更新 更多