我正在尝试创建一个博客,其中一个类别可能包含一些子类别。 我是在我的模型中完成的。py
class Category(models.Model):
title = models.CharField(max_length=50, unique=True)
def __str__(self):
return f"{self.title}"
class SubCategory(models.Model):
category = models.ForeignKey(Category, on_delete=models.CASCADE)
title = models.CharField(max_length=50, unique=True)
def __str__(self):
return f"{self.title}"
但是我认为为同一任务创建两个不同的类是不正确的。那么还有其他方法可以做到吗?谢谢。
答案 0 :(得分:2)
您可以尝试使用自引用的ForeignKey。
class Category(models.Model):
title = models.CharField(max_length=50, unique=True)
parent_category = models.ForeignKey('self', related_name='sub_category')
def __str__(self):
return f"{self.title}"
然后它将像这样工作:
a_category = Category.objects.create(title='Parent category')
Category.objects.create(title='subcategory', parent_category=a_category)
要获取所有子类别,您将要做:
a_category.sub_category.all()
答案 1 :(得分:0)
好吧,您所做的没错,但是如果要在同一张表上执行此操作,则可以在charfield上使用choice。
YEAR_IN_SCHOOL_CHOICES = (
(FRESHMAN, 'Freshman'),
(SOPHOMORE, 'Sophomore'),
(JUNIOR, 'Junior'),
(SENIOR, 'Senior'),
)
sub_cat = models.CharField(choices=YEAR_IN_SCHOOL_CHOICES)
您可以了解有关选择here
的更多信息