我正在为wiki应用程序创建一个django-rest api,目前,我正在考虑创建三个模型:
MainCategory
->Linux或Windows- 每个操作系统的
SubCategory
,带有类别列表 - 每个子类别的
WikiContent
我的问题是,我不知道如何以正确的方式进行操作,因为我希望对于每个类别,我只看到依赖的类别,而不是所有类别,WikiContent将看到的内容取决于用户选择的类别。谢谢你的帮助。
class Category(models.Model):
TYPE_CHOICES = (
('Linux', 'Linux'),
('Windows', 'Windows')
)
name = models.CharField(
max_length=10,
choices=TYPE_CHOICES,
default='Linux',
)
def __str__(self):
return self.name
class SubCategoryLinux(models.Model):
# TYPE_CHOICES_LINUX = (
# ('Installs', 'Installs'),
# ('Sysaid', 'Sysaid'),
# ('DataBase', 'DataBase'),
# ('Docker', 'Docker'),
# ('Devops', 'Devops'),
# ('Linux Hardware', 'Linux Hardware'),
# ('Programming', 'Programming'),
# ('Monitoring', 'Monitoring')
# )
# TYPE_CHOICES_WIN = (
# ('Installs','Installs'),
# ('Sysaid', 'Sysaid')
# )
name = models.CharField(max_length=100)
category = models.ForeignKey(Category, on_delete=models.CASCADE, related_name='category')
def __str__(self):
return self.name
class Content(models.Model):
title = models.CharField(max_length=255, unique=True)
category = models.ForeignKey(Category, on_delete=models.CASCADE, related_name='category')
sub_category = models.ForeignKey(SubCategory, on_delete=models.CASCADE, related_name='sub_category')
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(null=True)
content = models.TextField(max_length=40000)
def __str__(self):
return self.title
我可能会建议您采用不同的设计方法。
我不知道你对Category/Subcategory的计划是什么,但现在,它只包含name
,所以我认为更好的方法是删除Category/Subcategory表,并将内容模型的Category/Subcategory调整为只有Charfield可以选择。
如果您坚持为类别和子类别分别提供表格:
这取决于你计划对表格做什么——如果你只自己输入一次类别/子类别——我建议简化它,只需删除选项。
如果你真的需要根据主Linux/Windows选项进行选择,你需要在计划使用它的地方动态构建选择(因为目前还不清楚(。