Views.py处理表单数据
问题描述:
我form.htmlViews.py处理表单数据
{{ form_field(task_form['execution_time']) }}
<input type="text" name="admin_time">
views.py
class CreateTaskView(LoginRequiredMixin, MyStaffUserRequiredMixin, generic.CreateView):
model = Task
form_class = TaskForm
template_name = 'tasks/form.html'
def get_context_data(self, *args, **kwargs):
ctx = super(CreateTaskView, self).get_context_data(*args, **kwargs)
ctx['task_form'] = ctx.get('form')
ctx['action'] = 'Add'
ctx['cancel_url'] = reverse('tasks.list')
return ctx
def form_valid(self, form):
form.save(self.request.user)
messages.success(self.request, _('Your task has been created.'))
return redirect('tasks.list')_url'] = reverse('tasks.list')
return ctx
当处理形式,如果admin_time具有值,然后execution_time应等于admin_time。
我该如何解决这个问题? 我想是这个 - 但它抛出eror
def get_context_data(self, *args, **kwargs):
ctx = super(CreateTaskView, self).get_context_data(*args, **kwargs)
ctx['task_form'] = ctx.get('form')
if self.admin_time.is_valid():
task.execution_time=self.admin_time
else:
ctx['action'] = 'Add'
ctx['cancel_url'] = reverse('tasks.list')
return ctx
答
CreateView.get_context_data
用于发送附加的上下文到您的模板(或重写存在的),它只有当你有渲染空值request.GET
你产生可以在request.POST
上接收数据,因此它会按顺序产生方法(主要是)dispatch
- >post
- >form_valid
或form_invalid
- >重定向到成功url。你可以看到有没有get_context_data
所以从get_context_data
删除怪异代码:
if self.admin_time.is_valid():
task.execution_time=self.admin_time
else:
我可以看到你重写form_valid
,所以如果它运行 - 形式已经是有效的,你可以从它那里得到“清理数据”,如果你想前form.save()
执行一些额外的验证,把下面的代码:
admin_time = form.cleaned_data['admin_time']
# check if it is not empty
if admin_time:
self.execution_time = admin_time
,你不应该在你form_valid
做到这一点return ctx
,因为它从来没有第一次返回后到达这里。
我还建议你看一下CreateView
类实现https://docs.djangoproject.com/en/1.7/ref/class-based-views/generic-editing/#createview和Django的教程和文档,如果你想了解你在做什么https://docs.djangoproject.com/en/1.7/intro/tutorial01/有〜6个教程,阅读和尝试这一切,http://www.checkio.org/为学习蟒蛇。因为这里我们主要不忠于等的问题。
我基本上想要做的是: 如果有一个字段admin_time的值,那么execution_time应该是admin_time,并且这应该在处理表单时添加。 任何帮助,将不胜感激 – 2014-10-29 21:15:22