这是一个悬而未决的问题。 我正在尝试编写HTML页面来定义/编辑 问题 (数据库对象)。 问题 由小文本和类型组成:类型表示其偏角。 例如,问题倾向是滑块,是 - 否,自由文本或多项选择。 对于自由文本和是 - 否拒绝,不需要进一步的信息。 但是对于滑块和多选,必须输入附加信息。
现在我完成/尝试的是创建表单,视图和模板来定义一般问题,并创建 sub 表单,每个问题偏差的视图和模板,需要额外的字段。
问题是我在子表单中保留通用问题ID 以将附加字段附加到问题时遇到困难。我试图将它传递给子视图,但我必须在表单中访问它以使用问题引用保存数据库对象,因此这意味着在表单中添加隐藏的输入字段,这会导致其他问题,等等等...
我缺少的是网络开发体验......我能得到的更好的是动态下拉菜单适应所选的问题类型,但我不知道javascript或ajax语言现在,所以一些不同的观点/模板就足够了。
实现这一目标的最简单/最好的方法是什么? 我不是要求代码而是要求方法。
如果我错过了让问题难以理解的事情,请告诉我。
答案 0 :(得分:2)
您的方法对我来说似乎很好(创建基本视图,表单类和模板,可以为每个偏差继承和定制),模型部分除外。
由于您的倾向可能包含一些自定义字段,因此我不认为在您的所有问题类型中使用相同的模型是有效的。
我会使用model inheritance,如下所示:
class BaseQuestion(models.Model):
"""Your base model for all questions"""
title = models.CharField(max_length=255)
description = models.TextField()
class YesNoQuestion(BaseQuestion):
pass
class FreeTextQuestion(BaseQuestion):
pass
class MultipleChoicesQuestion(BaseQuestion):
# assuming you have a QuestionChoice model to store your available choices
choices = models.ManyToManyField(QuestionChoice)
class SliderQuestion(BaseQuestion):
slider_start = models.IntegerField(default=1)
slider_end = models.IntegerField(default=10)
请参阅Django文档以获得有关模型继承的深入解释,但您需要了解一件事:它会影响性能,尤其是在大型数据库上。但是,在你的情况下,似乎还有很长的路要走。
另请注意,某些django应用程序(如django-polymorphic)可能会帮助您处理模型继承。
对于剩下的过程,我会遵循这个过程: