Django如何在多对多关系中使用较少的查询进行选择

时间:2016-06-10 11:34:45

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

我有以下型号,

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一样访问它并在其中循环,那么它也是适用的。

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

感谢。

1 个答案:

答案 0 :(得分:0)

选择相关可用于当前模型中的外键。举个例子:

class TblMaterials(models.Model): name = ... .... 外键:TblMaterialCategories

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

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

它会起作用。