在 django class 基本视图中创建自定义方法
create custom methods in django class base views
我想通过 django 1.9 使用通用 class 基础视图
我想了解的是
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。我怎样才能做到这一点?
我知道使用函数基础视图很简单,但我想使用 class 基础视图来做到这一点。
将不胜感激。
对,这就是CBV要把握的主要问题:当事情运行,执行的顺序是什么(见http://lukeplant.me.uk/blog/posts/djangos-cbvs-were-a-mistake/)。
简而言之,每个基于 class 的视图都有一个 运行ning 事物的顺序,每个事物都有自己的方法。
CBV 对每个执行步骤都有专门的方法。
您可以从 运行 您想从中调用自定义方法的步骤中的方法调用自定义方法。例如,如果您希望在视图发现表单有效后 运行 您的方法,您可以这样做:
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)
因此您必须决定您的自定义方法应该放在哪里 运行,并为此步骤在视图泛型方法之上定义您自己的方法。
你怎么知道执行视图的每个步骤使用什么泛型方法?视图在获取表单的初始数据时调用的方法是 def get_initial
?来自 django 文档和 https://ccbv.co.uk/。
看起来很复杂,但实际上你只需要写很少的方法,就在你需要添加你自己的行为的地方。
我想通过 django 1.9 使用通用 class 基础视图 我想了解的是
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。我怎样才能做到这一点? 我知道使用函数基础视图很简单,但我想使用 class 基础视图来做到这一点。
将不胜感激。
对,这就是CBV要把握的主要问题:当事情运行,执行的顺序是什么(见http://lukeplant.me.uk/blog/posts/djangos-cbvs-were-a-mistake/)。
简而言之,每个基于 class 的视图都有一个 运行ning 事物的顺序,每个事物都有自己的方法。
CBV 对每个执行步骤都有专门的方法。
您可以从 运行 您想从中调用自定义方法的步骤中的方法调用自定义方法。例如,如果您希望在视图发现表单有效后 运行 您的方法,您可以这样做:
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)
因此您必须决定您的自定义方法应该放在哪里 运行,并为此步骤在视图泛型方法之上定义您自己的方法。
你怎么知道执行视图的每个步骤使用什么泛型方法?视图在获取表单的初始数据时调用的方法是 def get_initial
?来自 django 文档和 https://ccbv.co.uk/。
看起来很复杂,但实际上你只需要写很少的方法,就在你需要添加你自己的行为的地方。