在查询循环中显示 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})
所以我想在我创建的 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})