我是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)
甚至将每种文档类型分成自己的应用程序。我想我已经对此有所了解,并希望得到关于是否有更合适的方法来解决这个问题的任何反馈。
答案 0 :(得分:1)
如果一个文档只能是一种类型,我个人会在它自己的表中拥有它。这样他们就不会到处重复。
然后您的文档表的文档类型应该是文档类型表的外键(假设文档只能与文档类型表有一种类型或多对多关系,如果文档可能超过一种类型)
外键是一种很好的方法,可以确保您的桌子不会变成指向错误值或死值等的噩梦...