Django模型:是另一个对象的对象后代吗?

时间:2017-07-29 10:40:42

标签: django postgresql django-models

我的模特类别。类别可以有一个超类别和多个子类别 - 就像树结构一样。所有这些都是Category对象。

我正在尝试创建一个方法,告诉我self是否是给定类别的后代。现在,它可以说它是否是一个孩子,但我也想检测孙子,孙子等。

你知道怎么做吗?是否有一些内置工具?

class Category(models.Model):
    name = models.CharField(max_length=1000)
    url = models.URLField(max_length=1000)
    supercategory = models.ForeignKey('Category',null=True,blank=True)

    def is_subcategory(self,category):
        if self.supercategory == category:
             return True

    def __unicode__(self):
        return self.name

1 个答案:

答案 0 :(得分:1)

您可以使用递归来实现此目的。 递归是编程中的一般概念,基本上就是函数调用自身时。

您可以这样做:

def is_subcategory(self,category):
    if self.supercategory is None:
         return false
    return (self.supercategory == category or 
            self.supercategory.is_subcategory(category))

如果在父类别中存在循环,那么这是一个无限的堆栈调用。