0

即使该模型的数据库中少于 30 个,我也想使用 Django ORM 返回 30 个项目。有没有办法强制它返回这么多项目,即使这意味着返回重复项?

projects = Project.objects.filter(approved=True).order_by('?')[0:30]

这可能吗?上面的代码返回 4 个项目,因为这就是我的数据库中有多少。

更好的方法是操纵项目变量使其包含 30 个项目吗?我希望项目随机化。

4

2 回答 2

7

如果结果集是 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
于 2012-11-30T15:31:21.687 回答
0

不,你不能。你必须连接你的结果,直到你到达 N 个对象,其中 N 是你需要的数字。

于 2012-11-30T15:30:33.167 回答