尝试创建一个对象的元组创建一个对象和一个查询

2024-04-27 00:57:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要迭代模板中的一个元组,但是从我构建的代码中我得到了一个对象(相册)和一个查询集(照片)的元组。问题是现在如何在模板中迭代它们?在

型号:

class Album(models.Model):
    title = models.CharField('כותרת', max_length=100, db_index=True)
    created = models.DateTimeField('תאריך פרסום', auto_now_add=True)
    creator = models.ForeignKey(User, related_name='galleries_creator', verbose_name='נכתב ע"י')

class Photo(models.Model):
    title = models.CharField('כותרת', max_length=100)
    album = models.ForeignKey(Album, verbose_name='שייך לאלבום')
    photo = models.ImageField('תמונה', blank=True, upload_to=get_image_path)
    photo_mid = models.ImageField('תמונה בינונית', blank=True, upload_to='images/galleries/mid/', editable=False)
    photo_thumb = models.ImageField('תמונה קטנה', blank=True, upload_to='images/galleries/thumbs/', editable=False)
    created = models.DateTimeField('תאריך פרסום', auto_now_add=True)
    is_landscape = models.NullBooleanField(blank=True, verbose_name='האם תמונת לנדסקייפ', editable=False)

视图:

^{pr2}$

模板:

{% for album, photo in albums %}
    <div class="polaroid" id="picture_{{ forloop.counter }}">
        <img src="{{ MEDIA_URL }}{{ photo.photo }}" alt="Picture #{{ forloop.counter }}" />
        <p class="caption"><p class="title">אלבום {{ forloop.counter }}</p><p>{{ album.creator.first_name }} {{ album.creator.last_name }}</p>
    </div>
{% endfor %}

在我看来,我做不到照片.photo因为photo是一个列表,而不是一个对象,我真的不想对元组中的每个照片都执行for循环(只有一个照片,所以这只是浪费)。在

assert False album_list返回:

[(<Album: אלבום שני - ממשק מנהל>, [<Photo: אלבום 2 תמונה 2>]), (<Album: אלבום ראשון - ממשק מנהל>, [<Photo: אלבום 1 תמונה 7>]), (<Album: אלבום  נתן>, [<Photo: נסיון 4>])]

在视图或模板中我可以做些什么来解决这个问题?在


Tags: name模板falsetruealbumtitlemodels照片
2条回答

如果你想要的每个相册只有一张照片,那为什么要切掉查询集呢?只需使用索引获取第一个:

album_list.append((album, Photo.objects.filter(album=album).order_by('?')[0]))

好吧,现在,使用内部for循环来解决这个问题,它显然是有效的,但是如果可能的话,我很乐意听到任何其他建议来以更有效的方式来完成它。。。在

<img src="{% for p in photo %}{{ MEDIA_URL }}{{ p.photo }}{% endfor %}" alt="Picture #{{ forloop.counter }}" />

10倍:-)

相关问题 更多 >