简单的Djanqo查询生成令人困惑的Queryset结果

时间:2011-10-21 00:04:47

标签: django django-queryset

[更新:软件版本Python 2.7.2,Django 1.3.1]

任何人都可以解释这个控制台代码吗?

FinishingStep对引用对象有一个ForeignKey,但这并不是真的相关。

>>> fins = FinishingStep.objects.filter(quote=jq)
>>> fins
[<FinishingStep: Tabbing>, <FinishingStep: Collator>]

到目前为止,我们已经返回了一个包含两个对象的QuerySet。

但是现在混乱了。现在两个对象看起来都是一样的:

>>> fins[0]
<FinishingStep: Collator>
>>> fins[1]
<FinishingStep: Collator>

将其转换为列表,然后修复它。

>>> fins = list(fins)
>>> fins
[<FinishingStep: Tabbing>, <FinishingStep: Collator>]
>>> fins[0]
<FinishingStep: Tabbing>
>>> fins[1]
<FinishingStep: Collator>

[更新:在查询中添加.distinct()也可以修复它。这特别奇怪,因为目前数据库中只有这两项。]

这是一个错误吗?我做错了吗?

1 个答案:

答案 0 :(得分:2)

此故障单讨论了此行为:https://code.djangoproject.com/ticket/9006

只需使用order_by查询即可。发生这种情况是因为如果您未指定显式排序,则数据库引擎可以自由返回任何合适的行。所以我猜它只是从缓存中选择一个。