這是我試圖實現的一個過於簡單的示例。比方說,我有這兩種模式:Django - 從隨機數據庫條目創建動態表單
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;這就是你的觀點。 –