我有一个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。
感谢。
答案 0 :(得分:4)
在使用没有参数的select_related()
时,默认情况下不遵循这些关系。您必须明确指定名称:
NoticedUser.objects.all().select_related('article', 'photo')