【问题标题】:Django how to select with less queries in a many to many relationshipDjango如何在多对多关系中使用较少的查询进行选择
【发布时间】:2016-10-11 08:42:53
【问题描述】:

我有以下型号,

class TblMaterials(models.Model):
name = ...
....

class TblCategoris(models.Model):
name = ...
....

class TblMaterialCategories(models.Model):
    tbl_categories = models.ForeignKey(TblCategories, blank=True, null=True)
    tbl_materials = models.ForeignKey('TblMaterials', blank=True, null=True)

在我的主页中,我想打印其中的所有材料和相关材料类别。显然,有些材料可能没有任何类别。

在我看来,我尝试类似:

TblMaterials.objects.all().select_related('tblmaterialcategories_set')

在模板中:

{%for mat in materials%}
    {{mat.name }}

    {%for cat in mat.tblmaterialcategories_set.all %}
         {{cat.tbl_categories.name}} ,
    {%endfor%}

{%endfor%}

我认为 select_related 在那个 _set 项目中不起作用。 我想在不查询每个项目的情况下实现类似的目标。如果我可以在材料查询集中添加另一个字段并像 mat.categories 和 for 循环一样访问它,它也很适用。

显示所有材料及其类别的最佳方式是什么?

谢谢。

【问题讨论】:

  • 你应该使用prefetch_related,而不是select_related

标签: django django-models django-templates django-views


【解决方案1】:

Select related 可用于当前模型中的外键。举个例子:

类 TblMaterials(models.Model): 名字 = ... …… 外键:TblMaterialCategories

在调用 TblMaterial 模型时,如果要使用与 TblMaterialCategories 相关的选择

TblMaterials.objects.all().select_related('tblmaterialcategories')

它会起作用的。

【讨论】:

    猜你喜欢
    • 2021-06-24
    • 2013-11-22
    • 2011-11-13
    • 2019-03-28
    • 2017-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-15
    相关资源
    最近更新 更多