我试图用一个表单集为一组相关的日期时间框架的创建形式:提供每种形式不同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创建了一个新的问题。