如何在django中为一个问题添加多个表单字段类型的选项?
我正在创建一个类似“轮询”的应用程序。在这个应用程序中会有问题,每个问题都有一个或多个答案选择答案选择可以是文本、图像或视频。 我制作了一个名为“问题”的模型,并针对不同的选择类型制作了不同的模型:如何在django中为一个问题添加多个表单字段类型的选项?,django,django-models,django-admin,Django,Django Models,Django Admin,我正在创建一个类似“轮询”的应用程序。在这个应用程序中会有问题,每个问题都有一个或多个答案选择答案选择可以是文本、图像或视频。 我制作了一个名为“问题”的模型,并针对不同的选择类型制作了不同的模型: class Question(models.Model): question_text = models.TextField() category = models.ForeignKey(QuestionCategory) created_at = models.DateTi
class Question(models.Model):
question_text = models.TextField()
category = models.ForeignKey(QuestionCategory)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class ChoiceText(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
choice = models.CharField(max_length=255)
class ChoiceImage(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
choice = models.ImageField()
假设一个问题可能有多个相同类型的答案,例如一个问题可能有4个文本选项和2个图像选项,这可能是最好的方法 根据您计划如何使用这些模型,您可能希望创建一个名为
Choice
的模型类,并从中获得其他模型子类
Django的管理表单是高度可定制的。既然您没有给我们任何细节,请随意探索。我建议您选择相同的型号(选择)。您可以有一个名为choice_type的字段,用于选择选项的类型(“图像”、“文本”、“视频”)
在添加来自admin或front的数据时,您可以使用自定义表单,该表单具有基于choice_类型的clean method(需要基于choice类型的字段、图像字段验证、视频文件验证)中的验证规则。这似乎不太符合逻辑,使用继承会更好。@ubadub这里没有任何东西看起来是不和谐的。这取决于您如何以更好的方式实现解决方案。正如我所解释的,继承会更好。这就是继承的真正目的。我实现了inhertance和这两种方法,继承在管理端很难定制。这一个在管理方面更容易。我仍然不知道哪种方法更好。我会做更多的挖掘并接受一个答案。谢谢你的建议,唯一的问题是管理员端被模型表单弄得乱七八糟,因为我只需要一个模型表单,这取决于选择的类型。@DrGeneral管理员端是自定义的。我有同样的问题,但更复杂,我希望得到更好的答案。我在Django Admin中添加了一个缓存管理器。根据缓存类型,值可以是Bool、User、Str等,而不是使用多个字段,我希望根据选择动态更改表单的类型
class Choice(models.Model):
answer_type_choices = (
('1','Text'),
('2','Image'),
('3','Video'),
)
question = models.ForeignKey(Question, on_delete=models.CASCADE)
choice_type = model.CharField(max_length=1,choices = answer_type_choices)
choice = models.CharField(max_length=255)
choice_media = models.FileField(upload_to='uploads/')