これは達成しようとしているものの単純化された例です。Django - ランダムなdbエントリからの動的フォームの作成
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()
私はこれを行うと、必要に応じて、私は私の3つのランダムな質問を受けるが、フォームが検証されません。シャッフルをコメントアウトすると、すべてうまく動作しますが、毎回同じ質問が表示されます。
私は、Djangoがフォーム提出時に再度__init__メソッドを呼び出しているので、シャッフルを繰り返してさまざまな質問をしているようです。私はドキュメンテーションを読んでみましたが、私はなぜそれがそうであるのかについて私の頭を包み込むことはできません。
もちろん、提出時にinitを呼び出します。それがあなたの見解です。 –