【发布时间】:2014-05-14 01:06:38
【问题描述】:
我正在尝试从模型 A 中获取随机对象
目前,这段代码运行良好:
random_idx = random.randint(0, A.objects.count() - 1)
random_object = A.objects.all()[random_idx]
但我觉得这段代码更好:
random_object = A.objects.order_by('?')[0]
哪个是最好的?使用第一个代码删除对象可能出现问题?因为,例如,我可以有 10 个对象,但编号为 10 的对象不再存在?我是否误解了 A.objects.all()[random_idx] 中的某些内容?
【问题讨论】:
-
为什么要进行 2 个查询(一个用于计数,一个用于实际选择)而不是 1 个?
-
我认为第二个可能更好,但第一个不受您描述的问题的影响,因为它正在索引您已经绑定的列表,而不是通过数据库 ID 选择。另外,为什么不
random.choice(A.objects.all())? -
@Two-BitAlchemist blergh,这是最糟糕的:从数据库中获取所有行以便只返回一个。
-
@DanielRoseman 它的可读性也很强,如果在其他地方使用
A.objects.all(),则按顺序排列(与解决方案 2 不同),并简明扼要地说明了另一个潜在的用例。我没有看到任何关于性能的问题,只是什么会起作用,对于少数对象,可读性更重要。
标签: python django object random