反向外键 - Django中的错误?

时间:2014-07-08 15:09:16

标签: python django

我们正在使用带有外键的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中修复了?

1 个答案:

答案 0 :(得分:1)

当您尝试使用反向关系获取所有businessunit时,django正在连接到数据库,通过其父对象过滤所有子对象。

也许问题是因为你有一些没有链接到任何ContentSet的BusinessUnit