在查询循环中显示 ManytoManyField 元素

showing ManytoManyField element in a query loop

所以我想在我创建的 class 循环中显示元素,但是我不知道如何调用 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' 已经有一个值,所以它不是空的。我尝试了一些事情,但做不了什么,我需要帮助。

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

因此您可以通过以下方式实现它;

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

在视图中,您可以预取相关的 Tag 以避免进行额外的查询 per OA object:

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