Python Django:表单视图中as_view()调用的第一个方法是什么
我的URL配置为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中是否存在页码 在哪里进行这种处理是合适的?我还希望将它们存储为实例属性,以便在需要时进行进一步处理 编辑 另外,这里的棘手之处在于这里使用的表单类完全依赖于找到的对象 目前,在我们基于函数的视图中,一个装饰器用于完成该工作
/book/(?p\d+)/(?p\d+)/edit/
wheredjango.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
对象检索,直到表单验证。请参阅更新的问题。我想先验证标准,然后再做其他事情!