如何将嵌套类别添加到Django模型?

Mar*_*rty 3 python django django-models

我想要实现的是设计一个具有嵌套级别的类别的模型.

水平是这样的.

category0 > category1 > category2 > category3 > category4 > category5

帖子可以有级别0 - 5,所以帖子可以有类别0 - 1,而其他帖子可以有0 - 40 - 5,

给定最高级别的类别(0较低的while 5是最高的)应该从它下面的那个继承,(1 > 2 > 3 > 4 > 5)

我怎么能得到这个?

我目前的类别看起来像这样

class Category0(models.Model):
    name = models.CharField(max_length=50, unique=True)
    slug = models.SlugField(max_length=60)


class Category1(models.Model):
    name = models.CharField(max_length=50, unique=True)
    slug = models.SlugField(max_length=60)
    parent = models.ForeignKey(Category0)


class Category2(models.Model):
    name = models.CharField(max_length=50, unique=True)
    slug = models.SlugField(max_length=60)
    parent = models.ForeignKey(Category1)


class Category3(models.Model):
    name = models.CharField(max_length=50, unique=True)
    slug = models.SlugField(max_length=60)
    parent = models.ForeignKey(Category2)


class Category4(models.Model):
    name = models.CharField(max_length=50, unique=True)
    slug = models.SlugField(max_length=60)
    parent = models.ForeignKey(Category3)


class Category5(models.Model):
    name = models.CharField(max_length=50, unique=True)
    slug = models.SlugField(max_length=60)
    parent = models.ForeignKey(Category4)
Run Code Online (Sandbox Code Playgroud)

而帖子模型在这里

class Product(models.Model):
    title = models.CharField(max_length=20)
    slug = AutoSlugField(unique=True, populate_from='title')
    content = models.TextField(blank=True)
    category = models.ForeignKey(CategoryChild4)
Run Code Online (Sandbox Code Playgroud)

什么是最好的方法?任何建议或变更欢迎.

更新

后端是PostgrSQL.

谢谢

djq*_*djq 9

你能用a Foreign Keyself接近吗?

例如:

class Category(models.Model):

    parent = models.ForeignKey('self', default=None, null=True, blank=True, related_name='nested_category')
    nesting_level = models.IntegerField()
    name = models.CharField(max_length=50, unique=True)
    slug = models.SlugField(max_length=60)
Run Code Online (Sandbox Code Playgroud)

明确跟踪嵌套级别可能很有用,nesting_level但这样您就可以创建所描述的关系.