Django类中的递归__str__属性

时间:2017-08-07 16:50:42

标签: python django recursion

我的这个类在我的Django模型中有一个自引用外键

@python_2_unicode_compatible
class Category(models.Model):
    name = models.CharField(max_length=255)
    slug = models.SlugField(max_length=100)
    parent = models.ForeignKey('Category', blank=True, null=True)

    def cadena(self):
        if self.parent is None:
            return self.name
        else:
            return self.cadena(self.parent) + ' - ' + self.name

    def __str__(self):
        return self.cadena()

我希望获得一个包含此类别父级的字符串,其方法为“cadena”,如下所示:

Cat - SubCat - SubSubCat

使用此代码

c = Category.objects.get(id=12)
print c.cadena()

我收到了这个错误:

TypeError: cadena() takes exactly 1 argument (2 given)

有什么问题?为什么这个错误为2给定的参数?

1 个答案:

答案 0 :(得分:3)

要为父级调用cadena方法,您应该调用self.parent.cadena()。这将修复TypeError

def cadena(self):
    if self.parent is None:
        return self.name
    else:
        return self.parent.cadena() + ' - ' + self.name