Python Djnago模型设计数据库
我是Django项目的新手,想知道设计模型的最佳实践是什么。 我正在创建一个小项目,将有一个类别和子类别的方式收集的故事。我将其标记为Django,因为我还想验证应用程序的范围 应用程序: 索引、体裁 设计:Python Djnago模型设计数据库,python,django,django-models,database-design,model,Python,Django,Django Models,Database Design,Model,我是Django项目的新手,想知道设计模型的最佳实践是什么。 我正在创建一个小项目,将有一个类别和子类别的方式收集的故事。我将其标记为Django,因为我还想验证应用程序的范围 应用程序: 索引、体裁 设计: Index Genre |-- Story |--Section |-- Chapters |--Paragraph |-- title |-- text
Index
Genre
|-- Story
|--Section
|-- Chapters
|--Paragraph
|-- title
|-- text
|-- highlights
genre.models.py
class Story(models.Model):
stry = models.CharField(max_length=256,unique=True)
id =models.AutoField(primary_key=True)
def __str__(self):
return self.stry
class Section(models.Model):
stry = models.ForeignKey(Story,on_delete=models.CASCADE)
name = models.CharField(max_length=256)
desc=models.TextField()
id =models.AutoField(primary_key=True)
slug = models.CharField(max_length=240, null=True, blank=False)
created_at = models.DateTimeField(auto_now_add=True, null=False)
updated_at = models.DateTimeField(auto_now=True, null=False)
class Chapter(models.Model):
sec = models.ForeignKey(Section,on_delete=models.CASCADE)
name = models.CharField(max_length=256)
desc=models.TextField()
id =models.AutoField(primary_key=True)
slug = models.CharField(max_length=240, null=True, blank=False)
created_at = models.DateTimeField(auto_now_add=True, null=False)
updated_at = models.DateTimeField(auto_now=True, null=False)
class Paragraph(models.Model):
chap = models.ForeignKey(Chapter,on_delete=models.CASCADE)
title = models.CharField(max_length=120, null=True, blank=False)
subtitle = models.CharField(max_length=180, null=True, blank=False)
slug = models.CharField(max_length=240, null=True, blank=False)
body = models.TextField()
created_at = models.DateTimeField(auto_now_add=True, null=False)
updated_at = models.DateTimeField(auto_now=True, null=False)
体裁可以有许多故事,每个部分可以有许多章节和类似的模式
问题:
- 有没有更好的设计模式,我可以工作
- 可以将这些应用程序划分为不同的应用程序,也可以为每种类型或类型提供一个应用程序 包括作为一个模型的流派
- 我会提出这种设计
class DateTimeSlug(models.Model):
已创建\u at=models.DateTimeField(自动\u now\u add=True)
更新的\u at=models.DateTimeField(自动\u now=True)
slug=models.CharField(最大长度=240)
类元:
抽象=真
类名称描述(models.Model):
name=models.CharField(最大长度=256)
desc=models.TextField()
类元:
抽象=真
课堂故事(models.Model):
stry=models.CharField(最大长度=256,主键=True)
定义(自我):
回归自我
类部分(DateTimeSlug,NameDesc):
stry=models.ForeignKey(故事,在_delete=models.CASCADE上,相关的_name='sections')
类别章节(DateTimeSlug,NameDesc):
sec=models.ForeignKey(部分,关于删除=models.CASCADE,相关章节)
类别段落(DateTimeSlug):
chap=models.ForeignKey(章节,关于删除=models.CASCADE,相关的段落)
title=models.CharField(最大长度=120)
字幕=models.CharField(最大长度=180)
body=models.TextField()
id=models.AutoField(主键=True)
不是必需的,因为Django会自动将id
与AutoField一起添加。如果您想使用自定义PrimaryKey,则必须创建自己的PrimaryKey。我建议您可以在Story.stry
上完成。无需添加blank=False,null=False
。这是Django的标准行为
如果你想在yoru index应用程序中使用模型,你可以在需要的地方导入它
可以将这些应用程序划分为不同的应用程序,或者每个类型有一个应用程序,或者将类型作为一个模型
在我看来,我会在你的故事
-模型中添加一种“类型标签”,并将其保存在一起。你的索引
-应用程序会做什么?@KlimBim索引应用程序将用作索引。以列表形式显示所有流派,并允许搜索选项查找特定故事。我计划为每种类型制作一个应用程序,并使用idex显示所有应用程序列表。我认为这是一个非常糟糕的想法你可以把它分开。然而,当你想在不同的应用程序中使用你的模板或其他东西时,你必须注意你的名称空间。例如,如果在url.py
中设置了app\u name
。如果你是django的新手,你可以很容易地做到。为每个目的创建不同的路径
。例如,path(流派/惊悚片/…)
,path(流派/喜剧…)
等,并将其保存在一个应用程序中。