我得到了database.objects.all()和database.objects.get('name'),但如何从数据库中获取一个随机项目呢?我很难想象如何选择一个随机项目。
我得到了database.objects.all()和database.objects.get('name'),但如何从数据库中获取一个随机项目呢?我很难想象如何选择一个随机项目。
order_by('?')
也不是一个好的选择,正如django documentation中所述。import random
random_idx = random.randint(0, Model.objects.count() - 1)
random_obj = Model.objects.all()[random_idx]
model.objects.all().order_by('?')[0]
点击此处阅读更多:https://docs.djangoproject.com/en/dev/ref/models/querysets/#order-by
编辑:正如这里所示,lazerscience的答案确实更快。
注意:order_by('?')查询可能很昂贵且缓慢...
- Bernhard Vallant我会稍微有所不同。在 Django 中,QuerySet 本来就是惰性的。
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
random.choice()
调用了 len(queryset)
(在 random.py
中可以看到)。这将评估整个 queryset 并将其全部加载到内存中,然后再从中选择一个元素。 - knbk
values_list
并且有数百万条记录,Django将需要获取每个对象的id
。 - Bernhard Vallant