select_related不会连接标有null = True的列

时间:2009-09-24 17:02:10

标签: python django

我有一个Django模型 -

class NoticedUser(models.Model):
    user = models.ForeignKey(User, null=False)
    text = models.CharField(max_length=255, null=True)
    photo = models.ForeignKey(Photo, null=True, blank=True)
    article = models.ForeignKey(Article, null=True, blank=True)
    date = models.DateTimeField(default=datetime.now)

当我尝试获取对象时,即使用NoticedUser.objects.all()。select_related(),生成的查询不包含与'photo'和'article'表的连接。我查看了Django源代码,似乎包含null = True的字段应该导致左连接而不是内连接,但我还没有找到为什么在生成的查询中没有出现适当的左连接。这会在显示相关对象时导致其他查询,并且不可能为我们项目中使用的“照片”和“文章”表执行自定义连接。

实际上,连接仅出现在null = False的字段中,但我无法更改字段定义。

如何为结果查询的null = True的字段添加连接?我使用的Django版本是1.0.2。

感谢。

1 个答案:

答案 0 :(得分:4)

在使用没有参数的select_related()时,默认情况下不遵循这些关系。您必须明确指定名称:

NoticedUser.objects.all().select_related('article', 'photo')