我的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
答案 0 :(得分:0)
CreateView.get_context_data
用于向模板发送其他上下文(或覆盖存在的上下文),只有在必须呈现空值时才会生成request.GET
您可以在request.POST
上接收数据,因此它按顺序生成方法(主要的)dispatch
- &gt; post
- &gt; form_valid
或form_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 。因为在这里我们主要不忠于这样的问题。