Django测验应用程序,REST,如何设计模型?

标签 django django-models django-forms tastypie

我正在构建 django 测验应用程序,所有数据(问题/答案)都应通过 REST 服务提供。 我将使用 tastypie 来实现此目的。

我想到的是完美的结果 JSON,它可能看起来像(单个问题和答案):

{
    "level": 1,
    "question": "Example question",
    "choices":[
        {
            "content":"Example answer 1",
            "valid": true
        },
        {
            "content":"Example answer 2",
            "valid": false
        },
        {
            "content":"Example answer 3",
            "valid": false
        },
        {
            "content":"Example answer 4",
            "valid": false
        }
    ]
},

单个问题始终包含 4 个答案,其中一个或多个答案有效。

我不知道应该如何为这种模式设计 django 模型。

我应该使用问题外键创建“答案”模型吗?在这种情况下,也许其他解决方案会更好? 如果是这样,我如何使用 django admin/web 表单轻松添加新问题?

有什么想法或建议吗?

最佳答案

我过去使用过的模型结构如下:

class Questionnaire(models.Model):
    version = models.CharField()

class Question(models.Model):
    questionnaire = models.ForeignKey(Questionnaire)
    text = models.CharField()

class QuestionAnswer(models.Model):
    question = models.ForeignKey(Question)
    text = models.CharField()
    is_valid = models.BooleanField()

class UserAnswer(models.Model):
    answer = models.ForeignKey(QuestionAnswer)

此解决方案允许您设计多个问卷/测验,每个问卷/测验都有不同数量的问题。然后每个问题都有不同数量的答案,您可以选择有效的数量。

这种设计的最大问题是它并不真正有利于部分问卷/测验的完成。如果这是一个破坏者,您可以按如下方式调整 UserAnswer 类:

class UserQuestionnaire(models.Model):
    questionnaire = models.ForeignKey(Questionnaire)
    completed = models.BooleanField()

class UserAnswer(models.Model):
    answer = models.ForeignKey(QuestionAnswer)
    user_questionnaire = models.ForeignKey(UserQuestionnaire)

这会稍微破坏正常化,但允许您设置一个标志来判断接受者是否完成。

希望这可以帮助您入门!

关于Django测验应用程序,REST,如何设计模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21936287/

相关文章:

python - 'DisabledBackend' 对象没有属性 '_get_task_meta_for'

python - 何时使用 Serializer 的 create() 和 ModelViewset 的 perform_create()

django - 如何通过多对多字段中的对象(完全匹配)过滤 django 模型?

django-models - Django 优势 forms.Form 与 forms.ModelForm

django - Django表单: Changing help_text dynamically

python - 属性错误 : 'module' object has no attribute 'Command'

python - 最大递归深度超出 getter Django

python - 如果 Django ORM 要使用错误的 PK 值,是否需要自定义 ForeignKey 子类?

python - Django 模型表单集 : only track changes to those items that have been updated/saved in the set?

python - 覆盖 Django 中 ChoiceField 的初始化