我读过这个问题:In Django, how do I select 100 random records from the database?
并尝试使用Content.objects.all().order_by('?')[:30]
,但这会产生一些重复的项目。那么如何从数据库中选择30个唯一随机值?
答案 0 :(得分:2)
如果您在数据库中有可管理的条目数(即数千条),这将有效,即使它击中数据库两次,它可能比order_by('?')
更有效。
import random
content_pks = Content.objects.values_list('pk', flat=True)
selected_pks = random.sample(content_pks, 30)
content_objects = Content.objects.filter(pk__in=selected_pks)