Mar*_*rty 3 python django django-models
我想要实现的是设计一个具有嵌套级别的类别的模型.
水平是这样的.
category0 > category1 > category2 > category3 > category4 > category5
帖子可以有级别0 - 5,所以帖子可以有类别0 - 1,而其他帖子可以有0 - 4或0 - 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.
谢谢
你能用a Foreign Key来self接近吗?
例如:
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但这样您就可以创建所描述的关系.