Django模型:对象是另一个对象的后代吗?
我有一个模特类别。类别可以有一个超类别和多个子类别,如树结构。它们都是类别对象 我试图创建一个方法,告诉我self是否是给定类别的后代。现在,它可以说它是不是一个孩子,但我也想检测孙子、孙女等等 你知道怎么做吗?有什么内置的工具吗Django模型:对象是另一个对象的后代吗?,django,postgresql,django-models,Django,Postgresql,Django Models,我有一个模特类别。类别可以有一个超类别和多个子类别,如树结构。它们都是类别对象 我试图创建一个方法,告诉我self是否是给定类别的后代。现在,它可以说它是不是一个孩子,但我也想检测孙子、孙女等等 你知道怎么做吗?有什么内置的工具吗 class Category(models.Model): name = models.CharField(max_length=1000) url = models.URLField(max_length=1000) supercategor
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
可以使用递归实现这一点。 递归是编程中的一个普遍概念,基本上是函数调用自身时的递归 在这里,您可以执行以下操作:
def is_subcategory(self,category):
if self.supercategory is None:
return false
return (self.supercategory == category or
self.supercategory.is_subcategory(category))
这样做的危险之处在于,如果类别中存在循环,则会有无限个堆栈调用。哦,谢谢,我没有想到递归。很好的解决方案。对于这样的结构,您应该使用。