Django QuerySet 包含重复条目

Django QuerySet contains duplicate entries

我正在尝试使用 Django 的 ORM 检索 table 的一些内容。

results = Table.objects.using('production').filter(foreign_id=76)
results.count()  # 129807

此 table 的 id 列是主键,因此具有唯一条目。但是,返回的 QuerySet 有重复的条目:

results[7999].id  # 27177397
results[121679].id  # 27177397

不仅仅是 id 是重复的,它是整行。其实QuerySet的最后8000个结果都是重复的(我想到了前8000个但是没验证过)

当然,我已经验证 table 中的 id 列是唯一的,并且在直接使用 sql 查询 27177397 时(或通过django ORM),我只得到一个结果。

results = Table.objects.using('production').filter(id=27177397, foreign_id=76)
results.count()  # 1

怎么会这样?

我正在使用 Django 1.6.7 和 pyscopg2 2.5.3。

按外键过滤强制连接(另外,默认顺序可以诱导连接)。使用 distinct 删除重复行:

results = ( Table
            .objects
            .using('production')
            .filter(foreign_id=76)
            .order_by()
            .distinct()
            )