Отображение элемента ManytoManyField в цикле запроса
Я хочу показывать элементы в цикле из класса, который я создал, но я не знаю, как вызвать элемент 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 tag in i.tags.all %} {{ tag.nametag }}{% endfor %}</tr>
В представлении можно предварительно получить связанные Tag
объекты, чтобы избежать дополнительного запроса на OA
объект:
def home(request):
objetos = OA.objects.prefetch_related('tags')
return render(request, {'objetos': objetos})