如何在django中为问题添加多个表单字段类型的选项?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在django中为问题添加多个表单字段类型的选项?相关的知识,希望对你有一定的参考价值。
我正在创建一个像应用程序一样的“民意调查”。在这个应用程序中,将有问题,每个问题将有单个或多个答案选择。答案选项可以是文本,图像或视频。
我制作了一个名为Question的模型和不同选择类型的不同模型:
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()
- 这是设计模型的好方法,还是有更好的方法来解决这个问题?
- 它在管理方面看起来也不那么直观,管理方面的任何建议?我看了https://docs.djangoproject.com/en/2.1/intro/tutorial07/,但我仍然对将不同的选择结合到一个更好的用户友好方式感到困惑。
答案
我建议你选择相同的型号(选择)。你可以有一个名为choice_type的字段,它选择选择的类型('image','text','video')。
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/')
在从管理员或前端添加数据时,您可以使用基于choice_type的清洁方法(需要基于选择类型,图像字段验证,视频文件验证的字段)的一些自定义的表单。
另一答案
这可能是最好的方法,假设一个问题可能有多个相同类型的答案,例如一个问题可能有4个文本选择和2个图像选择。
根据您计划使用这些模型的方式,您可能希望创建一个名为Choice
的模型类,并使其他模型具有子类。
Django的管理表单是高度可定制的。由于您没有给我们任何细节,请随时探索the Django admin docs。
以上是关于如何在django中为问题添加多个表单字段类型的选项?的主要内容,如果未能解决你的问题,请参考以下文章
Django admin - 如何在自定义管理表单中为多对多字段添加绿色加号
如何在 Django 管理员中为模型字段使用自定义表单字段?
django 模板:如何知道表单字段类型并根据字段类型添加任何按钮