我想使用django 1.9来使用泛型类基本视图 我想要了解的是
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
现在我想将此自定义方法绑定到url。我怎么能做到这一点? 我知道使用函数库视图很简单,但我想使用类基本视图。
帮助将不胜感激。
答案 0 :(得分:3)
是的,这是CBV要掌握的主要问题:当事情发生时,执行的顺序是什么(见http://lukeplant.me.uk/blog/posts/djangos-cbvs-were-a-mistake/)。
简而言之,每个基于类的视图都有一个运行顺序,每个顺序都有自己的方法。
CBV为每个执行步骤都有专门的方法。
您可以从运行要从中调用自定义方法的步骤的方法调用自定义方法。如果您想在视图发现表单有效后运行您的方法,则执行以下操作:
<strong>Step 0.1</strong><br/>
<input type="number" min="0.1" step="0.1"/><br/>
<strong>Step 1.0</strong><br/>
<input type="number" min="0.1" step="1.0"/><br/>
<strong>Step 1 (not working)</strong><br/>
<input type="number" min="0.1" step="1"/><br/>
<strong>Step 'any' (not working)</strong><br/>
<input type="number" min="0.1" step="any"/><br/>
因此,您必须决定自定义方法应在何处运行,并在此步骤的视图通用方法之上定义您自己的方法。
您如何知道执行视图的每个步骤使用的泛型方法?视图在获取表单的初始数据时调用的方法是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)
?来自django docs和https://ccbv.co.uk/。
它看起来很复杂,但实际上你只需编写很少的方法,就像你需要添加自己的行为一样。