我尝试在表单启动时设置一个字段值。当表单启动时设置表单值
当我们进入视图时,这个字段的值被检索 - 视图是时间表。然后,对于视图中设置的每个时间,我想将其关联回时间表。
@login_required
@requires_csrf_token
def timesheet(request, timesheet_id):
timesheet = TimeSheet.objects.get(pk=timesheet_id)
NewTimeFormSet = modelformset_factory(Time, form=TimeForm, formset=RequiredFormSet)
if request.method == 'POST':
newtime_formset = NewTimeFormSet(request.POST, request.FILES)
for form in newtime_formset:
if form.is_valid():
form.save()
#then render template etc
所以,为了确保窗体验证我想在表单启动时设置这个字段。当我在视图中尝试在POST后设置此字段时,我无法获取要设置或验证的字段。
我的代码获取timesheet_id当模型实例在进入视图
def __init__(self, *args, **kwargs):
# this allows it to get the timesheet_id
print "initiating a timesheet"
super(TimeSheet, self).__init__(*args, **kwargs)
,然后生成的表单开始,我跑的形式INIT。所以这是我已经试过
class TimeForm(forms.ModelForm):
class Meta:
model = Time
fields = ['project_id', 'date_worked', 'hours', 'description', 'timesheet_id',]
# some labels and widgets, the timesheet_id has a hidden input
def __init__(self, *args, **kwargs):
print "initiating form"
super(TimeForm, self).__init__(*args, **kwargs)
timesheet = TimeSheet.objects.get(id=timesheet_id)
self.fields['timesheet_id'] = timesheet
这就提出了一个错误
NameError: global name 'timesheet_id' is not defined
我不知道如何做到这一点?
我也试图设置字段在形式为clean()方法,但它填充(显示一个打印),然后仍然不验证,我提出一个formset错误'此字段是必需的'。
帮助!