如何以正确的顺序链接查询集,而不是按日期排序,按foreignKey排序?
Posted
技术标签:
【中文标题】如何以正确的顺序链接查询集,而不是按日期排序,按foreignKey排序?【英文标题】:How to chain quesrysets in the right order not sorted by date, sorted by foreignKey? 【发布时间】:2011-09-22 23:47:36 【问题描述】:我正在建立一个照片库,但已发布的那些没有给我我需要的东西,所以我从头开始构建它。
在索引页面中,我需要从相册模型中获取随机相册(这很好),并为每个相册从照片模型中获取其中一张照片 (random
)。
型号:
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)
正如我所见,为了遍历模板中的相册并获得相册的正确照片,我需要链接相册列表和我得到的照片列表,但是在正确的顺序 (album object, photo object etc
),但我得到的是所有专辑,然后是所有照片(按正确的顺序,但在模板中没有任何效果,很明显)。
查看:
def index(request):
albums = Album.objects.all().order_by('?')[:10]
album_photo_lst = []
for album in albums:
album_photo_lst.append(Photo.objects.filter(album=album).order_by('?')[:1])
album_list = list(chain(albums,album_photo_lst))
return render_to_response('galleries/index.html','albums':album_list, context_instance=RequestContext(request))
也许我过于复杂了,也许有人可以帮助我解决这个问题。
10 倍, 埃雷兹
【问题讨论】:
【参考方案1】:如果不尝试更改您的查询,我建议使用(album, photo)
tuples 的列表而不是长列表:
for album in albums:
album_list.append((album, Photo.objects.filter(album=album).order_by('?')[0]))
现在使用
for album, photo in album_list
(如果相册中有 0 张照片,请务必检查会发生什么。)
【讨论】:
谢谢,我在将实际图像表单放入 IMG 标签时遇到问题,但这是我需要解决的另一个问题,但至于问题,这是有效的 :-) 如果可以的话,关于其他事情,当我在album_list 上断言false 时,我可以看到我得到了([Album,[<...>
以上是关于如何以正确的顺序链接查询集,而不是按日期排序,按foreignKey排序?的主要内容,如果未能解决你的问题,请参考以下文章