我正在创建一个类似“投票”的应用程序。在此应用程序中将有问题,每个问题将有一个或多个答案选择。 答案选项可以是“文本”,“图像”或“视频”。
我已经建立了一个名为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()
答案 0 :(得分:0)
假设一个问题可能有多个相同类型的答案,例如,这可能是最好的方法。一个问题可能有4个文本选择和2个图像选择。
根据您计划使用这些模型的方式,您可能想要创建一个名为Choice
的模型类,并从中获得其他模型的子类。
Django的管理表单是高度可定制的。由于您尚未提供任何详细信息,请随时浏览the Django admin docs。
答案 1 :(得分:0)
我建议您使用相同的型号(选择)。您可以具有一个名为choice_type的字段,用于选择选项的类型(“图像”,“文本”,“视频”)。
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/')
在从管理员或前端添加数据时,您可以通过一些自定义表单来创建表单,该表单具有基于cleaning方法的验证规则(要求基于选择类型的字段,图像字段验证,视频文件验证)基于choice_type。