我正在通过Django构建一个庞大而复杂的表单系统。它比我构建的任何形式都复杂,我有一些数据库设计背景但没有很多Django的经验。
假设有大约500个可能的问题和6种不同的表单类型。大约75%的问题对于所有6种形式都是共同的,但其余的问题在各种形式中以1-5种形式出现,有些重叠的组合(例如,问题20出现在表格A,B和D上,但问题21出现了表格B,C和D)。
到目前为止我提出的可行解决方案是:
1)有一个模型是所有常见问题,然后是每个表单类型(A,B,C,D,E,F)的单独模型,它继承常见问题然后添加每个不是共同。这样做的缺点是某些字段的表单类型之间存在冗余(那些出现在多个表单上的问题)。
2)为所有500个问题都有一个表/模型,然后将每个表单类型链接到一个中间表,列出哪些问题适用于哪种表单类型。这似乎很容易与原始SQL /在纸上,但我无法弄清楚如何使它在Django中工作。如果FormAModel
的ManyToMany字段包含AllQuestionsModel
,则无法选择性地仅抓取适用于表单A的问题,是吗?
编辑:我意识到这与Django用户权限非常相似(用户有角色,角色属于不同的用户),但Django已经建立了如何为不同的用户分配不同的权限以便更快地设置。我怎样才能将这个想法复制到一组不同的模型中呢?
答案 0 :(得分:0)
如果您尝试将所有问题都放在一个模型中,该怎么办:
class Questions(models.Model):
question_text = models.CharField(
# parameters
)
form_a = models.BooleanField(
default=False,
help_text='Question is on Form "A" ',
)
form_b = models.BooleanField(
default=False,
help_text='Question is on Form "B" ',
)
form_c = models.BooleanField(
default=False,
help_text='Question is on Form "C" ',
)
form_d = models.BooleanField(
default=False,
help_text='Question is on Form "D" ',
)
form_e = models.BooleanField(
default=False,
help_text='Question is on Form "E" ',
)
form_f = models.BooleanField(
default=False,
help_text='Question is on Form "F" ',
)
然后你可以query
提出你想要的问题:
form_a = Questions.objects.filter(form_a=True)
或者,如果您想获得更多深度,可以尝试设置自定义managers
。
此外,如果更容易标记forms
未启用Questions
,请设置default=True
而不是default=False
。祝你好运。