Как разобрать множество значений отношения "один ко многим" в HTML-шаблоне в Django?
У меня есть отношения "один ко многим" в Django в таком виде:
class Listing(models.Model):
title = models.CharField(max_length=60)
class Images(models.Model):
listings = models.ForeignKey(Listing, on_delete=models.CASCADE)
image_urls = models.URLField(max_length = 200)
У меня определено следующее представление:
from .models import Listing, Images
def index(request):
All_Listings = Listing.objects.filter(isActive=True)
return render(request, "index.html", {
"All_Listings": All_Listings,
"Images" : Images
})
Теперь для каждого объявления я хочу показать все связанные изображения в моем HTML. Я пытался сделать следующее:
{% extends "layout.html" %}
{% block body %}
{% for listing in All_Listings %}
<h2>{{ list(Images.objects.filter(listings_id=2)) }}<h2>
{% endfor%}
{% endblock %}
(If this works, than later on I will replace 2 with listing.id)
Выдает следующую ошибку:
Exception Type: TemplateSyntaxError
Exception Value: Could not parse the remainder: '(Images.objects.filter(listings_id=2))' from 'list(Images.objects.filter(listings_id=2))'
Однако, когда я запускаю это из терминала, это работает:
>>> list(Images.objects.filter(listings_id=2))
[<Images: https://www.kettererkunst.com/still/kunst/pic570/531/422000352-4.jpg>, <Images: https://www.kettererkunst.com/still/kunst/pic570/531/422000352-1.jpg>]
Как я должен подойти к этому?
Вы можете создать класс @property image Listing и запросить в нем все связанные изображения.
class Listing(models.Model):
title = models.CharField(max_length=60)
@property
def images(self):
return Images.objects.filter(listings=self)
class Images(models.Model):
listings = models.ForeignKey(Listing, on_delete=models.CASCADE)
image_urls = models.URLField(max_length = 200)
А затем вызовите listing.images
в шаблоне:
{% for listing in All_Listings %}
{%for image in listening.images%}
{{ image }}
{% endfor%}
{% endfor%}