我正在Django中编写我的第一个应用程序,我对create_object
Generic View有疑问;在我的urls.py
中,我有:
(r'^new$', CreateView.as_view()),
问题是当用户提交“新”表单时,我需要操作将保存到数据库的数据(我实际上需要添加user_id
外键);没有通用视图我以前写过:
form = ClientForm(request.POST)
if form.is_valid():
data = form.save(commit=False)
data.user = request.user
data.save()
form.save_m2m()
在我看来(注意data.user=request.user
)。我搜索过Django文档,但我找不到办法(可能是通过扩展CreateView
类) - 有些在The Book中只有一个例子覆盖了get_object
方法ListView
类来更新last_accessed_date
字段。
答案 0 :(得分:21)
您可以通过覆盖get_form
方法来执行此操作:
from django.views.generic import CreateView
class CustomCreateView(CreateView):
def get_form(self, form_class):
form = super(CustomCreateView, self).get_form(form_class)
form.instance.user = self.request.user
return form
编辑:现在我会根据form_valid
覆盖Issac Kelly's answer:
from django.views.generic import CreateView
class CustomCreateView(CreateView):
def form_valid(self, form):
form.instance.user = self.request.user
return super(CustomCreateView, self).form_valid(form)
答案 1 :(得分:6)
您想要覆盖form_valid
method。