Python Django:表单视图中as_view()调用的第一个方法是什么

Python Django:表单视图中as_view()调用的第一个方法是什么,python,django,django-forms,django-views,Python,Django,Django Forms,Django Views,我的URL配置为/book/(?p\d+)/(?p\d+)/edit/wheredjango.views.generic.edit.FormView作为此端点的处理程序 一旦提出请求,我必须使用page\u id检查Book\u id中是否存在Book对象,以及相应的Book中是否存在页码 在哪里进行这种处理是合适的?我还希望将它们存储为实例属性,以便在需要时进行进一步处理 编辑 另外,这里的棘手之处在于这里使用的表单类完全依赖于找到的对象 目前,在我们基于函数的视图中,一个装饰器用于完成该工作

我的URL配置为
/book/(?p\d+)/(?p\d+)/edit/
where
django.views.generic.edit.FormView
作为此端点的处理程序

一旦提出请求,我必须使用
page\u id
检查
Book\u id
中是否存在
Book
对象,以及相应的
Book
中是否存在页码

在哪里进行这种处理是合适的?我还希望将它们存储为实例属性,以便在需要时进行进一步处理

编辑

另外,这里的棘手之处在于这里使用的
表单类
完全依赖于找到的对象

目前,在我们基于函数的视图中,一个装饰器用于完成该工作的方法。在基于类的视图中,我不确定该在什么位置执行此操作

在典型的函数基视图中

def get_object_or_404(view_function):
    def decorator(request, book_id, page_id):
        return view_function(request, book, page)
    return decorator

@get_book_or_404
def edit_book(self, book, page):
    # process the page
    return HttpResponse()

对于基于类的视图,我基本上找到了一种简单的方法,相当于
get\u book\u或
,这没关系,您也不必在意,视图中调用的第一个方法是什么。关键是把逻辑放在它应该放的地方。在这种情况下,由于您关心的是获取实例,因此您可能应该重写
get\u object
。在该方法中,您可以返回
book
对象,但也可以将book和page对象存储为实例属性。

听起来您需要在自己的视图中使用此检查逻辑,而不仅仅是将URL连接到FormView。但你为什么要检查?如果FormView不存在或不存在,是否会导致404?如果不满足条件,是否希望表单进行验证,或者是否希望重定向或其他操作?你可以看看这里,看看你可以在
表单中覆盖哪些方法:@frobberoffits我不清楚你说了什么。实际上,
SingleObjectMixins
提供了基于URLConf中的
pk
参数自动查找对象的方法。但是,我不能在这里使用它,因为有两种型号!而实际的
self.object
(取自
page\u id
)仅使用
Book\u id
@TimmyO'Mahony根据
Book
对象检索,直到表单验证。请参阅更新的问题。我想先验证标准,然后再做其他事情!