Views.py处理表单数据

时间:2014-10-29 20:28:48

标签: html django

我的form.html

      {{ 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。

我怎么能带来这个? 我想要这样的东西 - 但它会引发恐怖

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

1 个答案:

答案 0 :(得分:0)

CreateView.get_context_data用于向模板发送其他上下文(或覆盖存在的上下文),只有在必须呈现空值时才会生成request.GET

您可以在request.POST上接收数据,因此它按顺序生成方法(主要的)dispatch - &gt; post - &gt; form_validform_invalid - &gt;重定向到成功网址。您可以看到没有get_context_data,因此请从get_context_data中删除这些奇怪的代码:

if self.admin_time.is_valid():
    task.execution_time=self.admin_time
else:

我可以看到你覆盖form_valid所以如果它运行 - 表格已经有效,你可以得到清理数据&#34;如果您想要执行一些额外的验证,请在 form.save()之前添加以下代码

admin_time = form.cleaned_data['admin_time']

#  check if it is not empty
if admin_time:
    self.execution_time = admin_time

你不应该在return ctx form_valid中执行此操作,因为它在首次返回后永远不会到达此处。

我还建议您查看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/ 学习python 。因为在这里我们主要不忠于这样的问题。