gpt4 book ai didi

Django - 从每个相册中随机选择一张照片

转载 作者:行者123 更新时间:2023-12-04 05:38:44 25 4
gpt4 key购买 nike

我试图从同步创建的数据中从每个相册中获取一张随机照片。模型(缩写)如下所示:


class Album(models.Model):
title = models.CharField(max_length=200)
photos = models.ManyToManyField('Photo')

class Photo(models.Model):
title = models.CharField(max_length=200)

我尝试了很多不同的方法,但都没有成功。这是另一个容易的吗?

采取2:最终代码:

def画廊(请求,template_name='galleries.html'):
albums = Album.objects.select_related().all()
album_list = []
for album in albums:
album_list.append({'title':album.title, 'id':album.id, 'photo':album.random_photo()})

return render_to_response(template_name, {
"album_list": album_list,
})

最佳答案

您可以使用 order_by 从任何查询集中获取单个随机对象。以问号作为参数的方法。这可能比调用 Photo.objects.all() 更好,因为它只会从数据库中为每个查询返回一个照片对象,而不是整个集合,然后使用 python 过滤列表。

例如,此查询将返回一张随机照片:
Photo.objects.order_by('?')[:1]
以下不是最优的,因为它需要对每个专辑进行 1 次查询,但它会起作用:

photos = []
for a in Album.objects.all():
photo = a.photos.order_by('?')[:1]
photos.append(photo)

编辑:
更改了 [0]索引到 [:1]因为如果相册不包含照片,前者会引发 IndexError 。

或者,在列表理解语法中:
photos = [a.photos.order_by('?')[:1] for a in Album.objects.all()]

关于Django - 从每个相册中随机选择一张照片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1139082/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com