Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.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
创建Django模型的新手_Django - Fatal编程技术网

创建Django模型的新手

创建Django模型的新手,django,Django,我是django的新手,试图了解如何创建我的模型。我正在构建一个应用程序,可用于从模板创建文档。这些文档可以有许多不同的类型,并且包含通用部分以及特定于每种文档类型的部分。我打算让用户可以选择的特定部分(包括在他们的文档中)根据他们选择创建的文档类型进行更改。但是,无论文档类型如何,都将使用泛型部分 我很难弄清楚如何构建模型来实现这一点。我考虑过为文档模型和节模型提供一种可以在html中设置和引用的文档类型,使节与每个文档相匹配: class Document(models.Model):

我是django的新手,试图了解如何创建我的模型。我正在构建一个应用程序,可用于从模板创建文档。这些文档可以有许多不同的类型,并且包含通用部分以及特定于每种文档类型的部分。我打算让用户可以选择的特定部分(包括在他们的文档中)根据他们选择创建的文档类型进行更改。但是,无论文档类型如何,都将使用泛型部分

我很难弄清楚如何构建模型来实现这一点。我考虑过为文档模型和节模型提供一种可以在html中设置和引用的文档类型,使节与每个文档相匹配:

class Document(models.Model):
    document_type = models.CharField(max_length=50)

class Sections(models.Model):
    document_type = models.CharField(max_length=50)
或在文档类型模型中添加:

class Document(models.Model):
    document_type = models.ForeignKey(DocumentType)

class Sections(models.Model):
    document_type = models.ForeignKey(DocumentType)

class DocumentType(models.Model):
    name = models.CharField(max_length=50)
但我担心这会导致问题,因为许多文档共享一些通用部分。因此我想知道我是否将通用部分和特定部分分开:

class GenericSection():
    document_type = models.ManyToManyField(DocumentType)

class SpecificSection():
    document_type = models.ForeignKey(DocumentType)

甚至可以将每种文档类型分离到自己的应用程序中。我想我已经陷入了困境,如果有任何关于是否有更合适的方法来解决这个问题的反馈,我将不胜感激。

如果一个文档只能是一种类型,我个人会将它放在自己的表中。这样,它们就不会到处重复

然后,文档表的文档类型应该是文档类型表的外键(假设一个文档只能有一种类型,或者如果一个文档可以有多种类型,则与文档类型表有多对多关系)


外键是确保表不会变成指向错误值或死值等的噩梦的好方法。

谢谢,这很有意义。那么,节表的文档类型是否与文档类型表存在多对多关系,以便每个节可以属于一个或多个文档类型?多对多只需要在一个模型文件中定义,因此如果您希望文档的documentType字段具有多对多,只需在文档模型文件中定义ManyToMany,而不是DocumentType模型文件。(假设您认为一个文档可以有多个文档类型)如果您的文档只能有一种类型,则不要使用外键。在我看来,你的思维过程是正确的,你可以使用外键,也可以使用很多外键。