Django 模型设计数据库
Djnago Models Design Database
我是 Django 项目的新手,想知道设计模型的最佳实践是什么。
我正在创建一个小项目,它将以类别和子类别的方式收集故事。我将它标记为 Django 因为我还想验证应用程序的范围。
应用:
索引、流派
设计:
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)
流派可以有很多故事,每个部分可以有很多章节和类似的模式
问题:
是否有更好的设计模型可供我使用?
可以将这些分成不同的应用程序或每个类型有 1 个应用程序或
包括流派作为模型。
我会提出这样的设计
class DateTimeSlug(models.Model):
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
slug = models.CharField(max_length=240)
class Meta:
abstract = True
class NameDesc(models.Model):
name = models.CharField(max_length=256)
desc=models.TextField()
class Meta:
abstract = True
class Story(models.Model):
stry = models.CharField(max_length=256, primary_key=True)
def __str__(self):
return self.stry
class Section(DateTimeSlug, NameDesc):
stry = models.ForeignKey(Story,on_delete=models.CASCADE, related_name='sections')
class Chapter(DateTimeSlug, NameDesc):
sec = models.ForeignKey(Section,on_delete=models.CASCADE, related_name='chapters')
class Paragraph(DateTimeSlug):
chap = models.ForeignKey(Chapter, on_delete=models.CASCADE, related_name='paragraphs')
title = models.CharField(max_length=120)
subtitle = models.CharField(max_length=180)
body = models.TextField()
id = models.AutoField(primary_key=True)
不是必需的,因为 Django 会自动添加 id
和 AutoField
。如果您想使用自定义主键,则必须自己制作。我建议你可以在 Story.stry
完成。添加 blank=False, null=False
是没有必要的。这是 Django 的标准行为。
如果你想在yoru index-App中使用一个模型,你可以在你需要的地方导入它。
Can divide these into different apps or have 1 app for each genre or include genre as a model.
在我看来,我会在您的 Story
-模型中添加一种“流派标签”并将它们放在一起。
我是 Django 项目的新手,想知道设计模型的最佳实践是什么。 我正在创建一个小项目,它将以类别和子类别的方式收集故事。我将它标记为 Django 因为我还想验证应用程序的范围。
应用: 索引、流派
设计:
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)
流派可以有很多故事,每个部分可以有很多章节和类似的模式
问题:
是否有更好的设计模型可供我使用?
可以将这些分成不同的应用程序或每个类型有 1 个应用程序或 包括流派作为模型。
我会提出这样的设计
class DateTimeSlug(models.Model):
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
slug = models.CharField(max_length=240)
class Meta:
abstract = True
class NameDesc(models.Model):
name = models.CharField(max_length=256)
desc=models.TextField()
class Meta:
abstract = True
class Story(models.Model):
stry = models.CharField(max_length=256, primary_key=True)
def __str__(self):
return self.stry
class Section(DateTimeSlug, NameDesc):
stry = models.ForeignKey(Story,on_delete=models.CASCADE, related_name='sections')
class Chapter(DateTimeSlug, NameDesc):
sec = models.ForeignKey(Section,on_delete=models.CASCADE, related_name='chapters')
class Paragraph(DateTimeSlug):
chap = models.ForeignKey(Chapter, on_delete=models.CASCADE, related_name='paragraphs')
title = models.CharField(max_length=120)
subtitle = models.CharField(max_length=180)
body = models.TextField()
id = models.AutoField(primary_key=True)
不是必需的,因为 Django 会自动添加 id
和 AutoField
。如果您想使用自定义主键,则必须自己制作。我建议你可以在 Story.stry
完成。添加 blank=False, null=False
是没有必要的。这是 Django 的标准行为。
如果你想在yoru index-App中使用一个模型,你可以在你需要的地方导入它。
Can divide these into different apps or have 1 app for each genre or include genre as a model.
在我看来,我会在您的 Story
-模型中添加一种“流派标签”并将它们放在一起。