扩展Django的通用视图

Sim*_*nti 11 django django-views

我正在Django中编写我的第一个应用程序,我对create_objectGeneric View 有问题; 在我urls.py,我有:

(r'^new$', CreateView.as_view()),
Run Code Online (Sandbox Code Playgroud)

问题是当用户提交"新"表单时,我需要操纵将保存到数据库的数据(我实际上需要添加user_id外键); 没有通用视图我曾经写过:

    form = ClientForm(request.POST)
    if form.is_valid():
        data = form.save(commit=False)
        data.user = request.user
        data.save()
        form.save_m2m()
Run Code Online (Sandbox Code Playgroud)

在我看来(通知data.user=request.user).我搜索过Django文档,但是我找不到这样做的方法(可能通过扩展CreateView类) - 有些在The Book中只有一个例子覆盖get_objectListView类的方法来更新last_accessed_date字段.

mes*_*shy 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
Run Code Online (Sandbox Code Playgroud)

编辑:现在我form_valid根据Issac Kelly的回答覆盖:

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)
Run Code Online (Sandbox Code Playgroud)


Iss*_*lly 6

您想要覆盖该form_valid方法.