gpt4 book ai didi

python - 表单启动时设置表单值

转载 作者:太空宇宙 更新时间:2023-11-03 15:40:58 24 4
gpt4 key购买 nike

我试图在启动表单时设置字段值。

当我们进入 View 时,会检索此字段的值 - 该 View 是时间表。然后,对于 View 中设置的每个时间,我想将其与时间表关联起来。

@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

因此,为了确保表单验证,我想在启动表单时设置此字段。当我尝试在 View 中 POST 后设置此字段时,我无法获取要设置的字段或要验证的表单。

当进入 View 时启动模型实例时,我的代码获取 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() 方法中设置该字段,但它会填充(通过打印显示),然后仍然无法验证,并且我提出了一个表单集错误“此字段是必需的” .

救命!

最佳答案

您实际上并未在表单 init 方法中接受 timesheet_id 参数,因此未定义该值,因此会出现错误。

但是,这是错误的做法。当您一直拥有它时,将值传递到表单,将其作为隐藏字段输出,然后将其取回是没有意义的。执行此操作的方法是从表单字段中排除该值,然后将其设置为保存。

class TimeForm(forms.ModelForm):

class Meta:
model = Time
fields = ['project_id', 'date_worked', 'hours', 'description',]

...

if request.method == 'POST':
newtime_formset = NewTimeFormSet(request.POST, request.FILES)
if newtime_formset.is_valid():
for form in newtime_formset:
new_time = form.save(commit=False)
new_time.timesheet_id = 1 # or whatever
new_time.save()

再次注意,您应该在迭代保存之前检查整个表单集的有效性;否则,您可能最终会在遇到无效表单之前保存其中一些。

关于python - 表单启动时设置表单值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42137198/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com