即使该模型的数据库中少于 30 个,我也想使用 Django ORM 返回 30 个项目。有没有办法强制它返回这么多项目,即使这意味着返回重复项?
projects = Project.objects.filter(approved=True).order_by('?')[0:30]
这可能吗?上面的代码返回 4 个项目,因为这就是我的数据库中有多少。
更好的方法是操纵项目变量使其包含 30 个项目吗?我希望项目随机化。
如果结果集是 30 个或更多对象,你很好,解决它的一种方法是itertools.cycle
用于你没有足够的地方......(这将再次从头开始重复数据)......并限制它使用itertools.islice
.
from itertools import islice, cycle
always_30_results = islice(cycle(result_set), 30))
for result in always_30_results:
print result # or whatever
不,你不能。你必须连接你的结果,直到你到达 N 个对象,其中 N 是你需要的数字。