如何在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()
  1. 这是设计模型的好方法,还是有更好的方法来解决这个问题?
  2. 它在管理方面看起来也不那么直观,管理方面的任何建议?我看了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 模板:如何知道表单字段类型并根据字段类型添加任何按钮

表单 ModelChoiceField 查询集 + 额外选择字段 django 表单

django admin中的表单字段描述

如何在 django modelform 中的必填字段后添加 *?