2014-10-29 60 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/學習蟒蛇。因爲這裏我們主要不忠於的問題。