尝试创建对象元组创建对象和查询集

Posted

技术标签:

【中文标题】尝试创建对象元组创建对象和查询集【英文标题】:Trying to create a tuple of objects create an object and a queryset 【发布时间】:2011-09-23 00:09:57 【问题描述】:

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

型号:

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)

查看:

def index(request):
    albums = Album.objects.all().order_by('?')[:10]
    album_list = []
    for album in albums:
        album_list.append((album, Photo.objects.filter(album=album).order_by('?')[:1]))
    return render_to_response('galleries/index.html','albums':album_list,  context_instance=RequestContext(request))

模板:

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

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

assert False album_list 返回:

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

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

【问题讨论】:

你为什么不做一个嵌套的for循环呢?还是我错过了什么? !0x,问题是我试图避免第二个循环。循环是时间和处理器的消费者,我已经有了我需要的东西,问题是,我可能在这里做错了,或者在视图中(需要返回 Photo 对象而不是集合)或模板中,我不认为正确的方法是当我在那里只有一个对象时为照片列表做一个 for 循环......但也许我错了...... 【参考方案1】:

如果您所追求的每个相册只有一张照片,那么为什么要对查询集进行切片呢?只需使用索引获取第一个:

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

【讨论】:

好的,谢谢,这就是我要找的,我忘记了 [0] 与 [:1] 不同,抱歉。这是完美的,现在我得到一个对象:-)【参考方案2】:

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

<img src="% for p in photo % MEDIA_URL  p.photo % endfor %"  />

10 倍 :-)

【讨论】:

以上是关于尝试创建对象元组创建对象和查询集的主要内容,如果未能解决你的问题,请参考以下文章

如何为ZF2中使用Sql对象创建的Sql语句的结果集设置数组对象原型

使用具有tensorflow对象的元组创建类对象

我的弹性映射中有一个嵌套对象。我正在尝试为该嵌套对象创建过滤器查询

在python 3中,如何创建一个元组,它是一个对象,元组中有多少个元素?它应作为函数参数有效[重复]

为不同的任务重新使用创建的数据集(对象检测 - 图像分类)

slice()函数创建一个slice对象