python - 在 Django 类基础 View 中创建自定义方法

标签 python django django-class-based-views

我想使用 django 1.9 的通用类基 View 我想了解的是什么

from django.views.generic import CreateView
from braces.views import LoginRequiredMixin
from .models import Invoice

class InvoiceCreateView(LoginRequiredMixin,CreateView):
    model = Invoice

    def generate_invoice(self):
        ...
        return invoice

现在我想将这个自定义方法绑定(bind)到 url。我怎样才能做到这一点? 我知道使用函数基 View 很简单,但我想使用类基 View 来做到这一点。

帮助将不胜感激。

最佳答案

是的,这是 CBV 中要把握的主要问题:当事情运行时,执行顺序是什么(参见 http://lukeplant.me.uk/blog/posts/djangos-cbvs-were-a-mistake/)。

简而言之,每个基于类的 View 都有一个运行顺序,每个都有自己的方法。

CBV 对每个执行步骤都有专门的方法。

您将从运行要从中调用自定义方法的步骤的方法调用自定义方法。例如,如果您希望在 View 发现表单有效后运行您的方法,您可以执行如下操作:

Class InvoiceCreateView(LoginRequiredMixin,CreateView):
    model = Invoice

    def generate_invoice(self):
        ... do something with self.object
        return invoice

    def form_valid(self,form):

        self.object = form.save()
        self.generate_invoice()
        return super(InvoiceCreateView,self).form_valid(form)

所以你必须决定你的自定义方法应该在哪里运行,并在这个步骤的 View 泛型方法之上定义你自己的方法。

您如何知道执行 View 的每个步骤使用什么泛型方法? View 在获取表单的初始数据时调用的方法是 def get_initial?来自 django 文档,和 https://ccbv.co.uk/ . 它看起来很复杂,但实际上您只需编写很少的方法,只需在您需要添加自己的行为的地方。

关于python - 在 Django 类基础 View 中创建自定义方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35406930/

相关文章:

python - 当参数可能非常大时进行内存

python - Sympy ODE 求解器初始条件无效

python - Ubuntu 上的 Django/Apache 和 virtualenv 没有使用正确的 Python 解释器

Django 更新/删除 View 。处理用户权限

python - 我以前从未见过 'class __proxy__',这是什么意思(我只见过像def __str__这样的)

python - 手动设置models.DateTimeField

python - Django Rest 框架的 ModuleNotFoundError

python - 将 Pk 或 Slug 传递给 Django 中的通用 DetailView?

django - 如何使用基于类的 View 按 Django 中相关字段的总和进行排序?

python - Py_BuildValue 和 PyArg_ParseTuple Seg 错误