我们正在使用带有外键的Django 1.4.13 - 我们有类BusinessUnit,它继承自具有类ContentSet的外键的类。我们在ContentSet类中有以下函数:
def business_units_default_content_set_count(self):
"""
Returns the number of business units linked to this content set as default.
"""
return len(set([bu.pk for bu in list(self.businessunit_set.all())]))
问题在于,如果我们创建没有主键的ContentSet(我们不将其保存到磁盘),则此函数返回一个非0的整数(例如30)。我通过将函数更改为:
来解决了这个问题def business_units_default_content_set_count(self):
"""
Returns the number of business units linked to this content set as default.
"""
if (self.pk):
return len(set([bu.pk for bu in list(self.businessunit_set.all())]))
else:
return 0
但为什么我们要检查self.pk
呢?这是Django 1.4.13的错误吗?如果是,是否在其他版本的Django中修复了?
答案 0 :(得分:1)
当您尝试使用反向关系获取所有businessunit时,django正在连接到数据库,通过其父对象过滤所有子对象。
也许问题是因为你有一些没有链接到任何ContentSet的BusinessUnit