【发布时间】:2016-05-26 05:16:17
【问题描述】:
这是我想要实现的目标的一个过于简单的示例。假设我有这两个模型:
class Question(models.Model):
text = models.CharField(max_length=255)
class Answer(models.Model):
text = models.CharField(max_length=255)
question = models.ForeignKey(Question)
假设我在数据库中有数千个问题,但我希望每个用户只回答几个随机问题。所以,我的想法是创建一个动态表单。像这样的:
class QuestionnaireForm(forms.Form):
def __init__(self, *args, **kwargs):
super(QuestionnaireForm, self).__init__(*args, **kwargs)
questions = list(Question.objects.all())
random.shuffle(questions) # it successfully validates without this line
questions = questions[:3]
for q in questions:
self.fields[q.text] = forms.CharField()
执行此操作时,我会根据需要收到三个随机问题,但表单无法验证。如果我注释掉改组,一切正常,但显然我每次都会得到相同的问题。
据我所知,Django 似乎在提交表单时再次调用了 __init__ 方法,因此重复了洗牌并得到了不同的问题。我尝试通读文档,但无法理解为什么会这样。
【问题讨论】:
-
当然它在提交时调用init;这就是您的视图的作用。
标签: python django forms django-forms django-validation