Django形成新手问题

f4n*_*4nt 4 python forms django

好吧,我对Django Forms感到茫然,因为文档似乎并没有完全涵盖我正在寻找的东西.一旦你超越了最基本的形式,至少它似乎会嘎然而止.作为答案,我非常愿意链接到良好的文档,或链接到涵盖此主题的好书.基本上,这是它如何分解,我有3个模型(测验,问题,答案).我有20个问题,每个测验有4个可能的答案(多项选择).数字可以变化,但你明白了.

我需要为这些项目创建一个表单,就像你在多项选择测验中所期望的那样.但是,当我在模板中手动创建表单时,而不是使用django.forms,我得到以下内容:

int()的基数为10的无效文字:'test'

所以我试图弄乱django.forms,但我想我只是没有理解如何用这些来构建一个合适的形式.非常感谢任何帮助,谢谢.

这里的模型值得一提:

class Quiz(models.Model):
    label = models.CharField(blank=True, max_length=400)
    slug = models.SlugField()

    def __unicode__(self):
        return self.label

class Question(models.Model):
    label = models.CharField(blank=True, max_length=400)
    quiz = models.ForeignKey(Quiz)

    def __unicode__(self):
        return self.label

class Answer(models.Model):
    label = models.CharField(blank=True, max_length=400)
    question = models.ForeignKey(Question)
    correct = models.BooleanField()

    def __unicode__(self):
        return self.label
Run Code Online (Sandbox Code Playgroud)

Jas*_*sta 6

是的,我必须同意文档和示例在这里真的缺乏.对于您正在描述的案例而言,这不是开箱即用的解决方案,因为它有三层深度:测验 - >问题 - >答案.

Django具有模型内联表单集,可以解决两层深层问题.要生成所需的表单,您需要做的是:

  1. 加载测验表单(只是模型中的标签文本框)
  2. 加载一个问题formset:QuestionFormSet(queryset = Question.objects.filter(quiz = quiz))
  3. 对于每个问题加载一个答案formset与加载问题formset的方式大致相同
  4. 确保以正确的顺序保存所有内容:quiz-> question-> answer,因为每个较低级别需要上面项目的外键