如何在models.py django

时间:2018-06-20 15:14:37

标签: python django

我正在尝试创建一个博客,其中一个类别可能包含一些子类别。 我是在我的模型中完成的。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}"

但是我认为为同一任务创建两个不同的类是不正确的。那么还有其他方法可以做到吗?谢谢。

2 个答案:

答案 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

的更多信息
相关问题