2014-10-29 59 views
0

我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 
+0

我基本上想要做的是: 如果有一个字段admin_time的值,那么execution_time应该是admin_time,并且这应该在处理表单时添加。 任何帮助,将不胜感激 – 2014-10-29 21:15:22

回答

0

CreateView.get_context_data用于发送附加的上下文到您的模板(或重写存在的),它只有当你有渲染空值request.GET

你产生可以在request.POST上接收数据,因此它会按顺序产生方法(主要是)dispatch - >post - >form_validform_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/学习蟒蛇。因为这里我们主要不忠于的问题。