我試圖用一個表單集爲一組相關的日期時間框架的創建形式:提供每種形式不同kwargs
class Event(models.Model):
date = models.DateField()
class TimeFrame(models.Model):
start = models.DateTimeField()
end = models.DateTimeField()
event = models.ForeignKey('Event')
我的代碼,讓我時限的queryset的每個事件並增加了一個kwarg這個傳遞到我的形式:
class SelectDatesForm(forms.Form):
timeframes = forms.ModelChoiceField(queryset=HostTimeFrame.objects.none())
def __init__(self, *args, **kwargs):
qs = kwargs.pop('timeframes')
super(SelectDatesForm, self).__init__(*args, **kwargs)
self.fields['timeframes'].queryset = qs
現在,我要建一個formset,讓我表演時間框架在一個頁面上的多個事件。我已經發現了this問題,解釋瞭如何傳遞初始數據,用於多種形式,但與將它傳遞給查詢集不同。
還有this django 1.9的新功能,但它不允許我爲每個窗體獲取不同的查詢集。
更新: 我從答案的解決方案然而工作,每當進出口運行formset.is_valid()我得到的錯誤:
Select a valid choice. That choice is not one of the available choices.
這是我做我的觀點:
timeframes = [HostTimeFrame.objects.all()]
SelectDatesFormset = formset_factory(form=SelectDatesForm, extra=len(timeframes), formset=BaseSelectDatesFormSet)
if request.method == 'POST':
formset = SelectDatesFormset(request.POST, form_kwargs={'timeframes_list': timeframes})
if formset.is_valid():
# do something with the formset.cleaned_data
print(formset)
pass
else:
formset = SelectDatesFormset(form_kwargs={'timeframes_list': timeframes})
我一直在嘗試幾個小時才能找到這個實際的驗證完成的地方,但我無法找到它爲我的生活。
編輯:我測試了這個單數形式,我有同樣的問題,我爲這個here創建了一個新的問題。