所以我得到了database.objects.all()和database.objects.get('name')但是如何从数据库中获取一个随机项目。我无法弄清楚如何选择一个随机项目。
答案 0 :(得分:16)
从所有数据库对象的列表中选择一个随机元素不是goog解决方案,因为检索数据库的所有元素会对性能产生很大影响,而order_by('?')
也没有使用{{3}中提到的import random
random_idx = random.randint(0, Model.objects.count() - 1)
random_obj = Model.objects.all()[random_idx]
}}
最佳解决方案应该是检索具有随机索引的元素:
{{1}}
答案 1 :(得分:2)
Aamir的解决方案将在丢弃除一个之外的所有对象之前选择所有对象。这非常浪费,此外,这种计算应该在数据库中完成。
model.objects.all().order_by('?')[0]
在此处阅读更多内容:https://docs.djangoproject.com/en/dev/ref/models/querysets/#order-by
编辑:lazerscience的答案确实更快,如here所示。
答案 2 :(得分:0)
我会做的略有不同。无论如何,django中的查询集都是懒惰的。
import random
def get_my_random_object():
object = random.choice(model.objects.all())
return object
https://docs.djangoproject.com/en/dev/topics/db/queries/#querysets-are-lazy https://docs.djangoproject.com/en/dev/ref/models/querysets/#when-querysets-are-evaluated