Wag*_*agh 6 python django django-class-based-views
我想使用 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
Run Code Online (Sandbox Code Playgroud)
现在我想将此自定义方法绑定到 url。我怎样才能做到这一点?我知道使用函数基视图很简单,但我想使用类基视图来做到这一点。
帮助将不胜感激。
是的,这是 CBV 中要掌握的主要问题:当事情运行时,执行的顺序是什么(参见http://lukeplant.me.uk/blog/posts/djangos-cbvs-were-a-mistake/)。
简而言之,每个基于类的视图都有一个运行顺序,每个都有自己的方法。
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)
Run Code Online (Sandbox Code Playgroud)
所以你必须决定你的自定义方法应该在哪里运行,并在这个步骤的视图通用方法之上定义你自己的方法。
你怎么知道执行视图的每个步骤使用什么通用方法?视图在获取表单的初始数据时调用的方法是def get_initial?来自 django 文档和https://ccbv.co.uk/。看起来很复杂,但实际上你只需要编写很少的方法,就在你需要添加自己的行为的地方。
| 归档时间: |
|
| 查看次数: |
6911 次 |
| 最近记录: |