gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 16:27:24 33 4
gpt4 key购买 nike

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

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com