【问题标题】:showing ManytoManyField element in a query loop在查询循环中显示 ManytoManyField 元素
【发布时间】:2021-12-05 20:53:38
【问题描述】:

所以我想从我创建的类中循环显示元素,但是我不知道如何调用 ManyToMany 元素,你能帮我吗?

class Tag(models.Model):
nametag = models.CharField(max_length=200, null=True)

class OA(models.Model):
tags = models.ManyToManyField(Tag)
...

我的功能:

def home(request):
objetos = OA.objects.all()
return render(request, {'objetos': objetos})

问题:

{% for i in objetos %}
...
<tr>{{i.tags.nametag}}</tr>
{% endfor %}

在这种情况下,'nametag' 已经有一个值,所以它不为空。我尝试了一些事情,但没有做太多,我需要帮助。

【问题讨论】:

    标签: django django-models many-to-many


    【解决方案1】:

    您需要枚举i.tags.all()。实际上,由于这是一个ManyToManyField,所以OA 可以有零个、一个或多个相关的Tags,而Tag 可以有零个、一个或多个OA 对象。

    因此您可以使用;

    &lt;tr&gt;{% for <strong>tag in i.tags.all</strong> %} {{ tag.nametag }}{% endfor %}&lt;/tr&gt;

    在视图中,您可以预取相关的Tags,以避免进行额外的查询每个 OA对象:

    def home(request):
        objetos = OA.objects.prefetch_related('tags')
        return render(request, {'objetos': objetos})

    【讨论】:

    • 你仍然可以呈现i对象的所有属性,所以如果OA有一个名为foo的字段,你可以用{{ i.foo }}渲染它。
    • 哦,它成功了,谢谢!最后一个错误只是我在管理页面中错误配置了数据。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-31
    • 2018-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-28
    • 1970-01-01
    相关资源
    最近更新 更多