2014-10-29 3 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.

Как это можно сделать? я хочу что-то вроде this-, но он бросает 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, тогда execute_time должно быть admin_time, и это должно быть добавлено при обработке формы. Любая помощь будет оценена по достоинству –

ответ

0

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 

И вы не должны делать это 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/ для обучения питона это. Потому что здесь мы в основном не лояльны к таким вопросам.

Смежные вопросы