Python/Django - 获取 for 标记中 ManyToManyField 的值

Python/Django - Get value of a ManyToManyField in a for tag

当我在 class 文章中使用 {% for %} 时,无法获取图像相关值。我尝试使用 select_related,但我不知道如何定义要在我的 <img /> 标签

src="" 属性中正确显示的图像

有没有一种干净的方法可以让我想要的样子出现?

models.py

    class Image(models.Model):
        gallery = models.ManyToManyField(Gallery)
        name = models.CharField(max_length=100)
        image = models.ImageField(upload_to='static/images/gallery')
        def __str__(self):
            return self.name

    class Article(models.Model):
        section = models.ForeignKey(Menu)
        title = models.CharField(max_length=100)
        text = models.TextField()
        type = models.ForeignKey(Type)
        image = models.ManyToManyField(Image)
        def __str__(self):
            return self.title

views.py

def index(request):
    slider = Article.objects.all()
    images = Image.objects.all()
    return render(request, 'cms/index.html', locals())

模板

{% for i in slider %}
<li>
    <img src="{{i.image}}" alt="{{i.title}}"/>
    <h2>{{i.title}}</h2>
    <p>{{i.text}}, {{i.image_url}}</p>
</li>
{% endfor %}

Article.image 是一个多对多字段。您要显示哪个图像?第一?

<img src="{{i.image.all.0.image.url}}" alt="{{i.title}}"/>

全部?

{% for im in i.image.all %}
<img src="{{im.image.url}}" alt="{{im.name}}"/>
{% endfor %}

您必须使用 2 个 for 循环来显示多对多图像 table。

{% for i in slider %}
<li>
    {% for im in i.image.all %}
    <img src="{{im.image.url}}" alt="{{im.name}}"/>
    {% endfor %}
    <h2>{{i.title}}</h2>
    <p>{{i.text}}, {{i.image_url}}</p>
</li>
{% endfor %}