我的模特类别。类别可以有一个超类别和多个子类别 - 就像树结构一样。所有这些都是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
答案 0 :(得分:1)
您可以使用递归来实现此目的。 递归是编程中的一般概念,基本上就是函数调用自身时。
您可以这样做:
def is_subcategory(self,category):
if self.supercategory is None:
return false
return (self.supercategory == category or
self.supercategory.is_subcategory(category))
如果在父类别中存在循环,那么这是一个无限的堆栈调用。