Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Djnago模型设计数据库_Python_Django_Django Models_Database Design_Model - Fatal编程技术网

Python Djnago模型设计数据库

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

我是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)
    
体裁可以有许多故事,每个部分可以有许多章节和类似的模式

问题:

  • 有没有更好的设计模式,我可以工作

  • 可以将这些应用程序划分为不同的应用程序,也可以为每种类型或类型提供一个应用程序 包括作为一个模型的流派


    • 我会提出这种设计

      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(流派/喜剧…)
      等,并将其保存在一个应用程序中。