【问题标题】:Extending Django's Generic Views扩展 Django 的通用视图
【发布时间】:2011-11-01 02:26:49
【问题描述】:

我正在用 Django 编写我的第一个应用程序,但 create_object 通用视图有问题;在我的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 中只有一个示例覆盖了 ListView 类的 get_object 方法更新 last_accessed_date 字段。

【问题讨论】:

  • 这里是“执行额外的工作”,他们解释了 get_object 方法可以通过扩展类link来覆盖

标签: django django-views


【解决方案1】:

您可以通过覆盖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

编辑:现在我会按照Issac Kelly's answer 覆盖form_valid

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)

【讨论】:

    【解决方案2】:

    您想覆盖form_valid method

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-20
      • 1970-01-01
      • 2012-05-07
      • 1970-01-01
      • 2011-12-12
      • 2013-10-11
      • 2011-07-29
      • 1970-01-01
      相关资源
      最近更新 更多