我想使用 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/