扩展Django的通用视图

时间:2011-08-22 11:52:08

标签: django django-views

我正在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字段。

2 个答案:

答案 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