我的问题和这个很相似:How do I access the request object or any other variable in a form's clean() method?
除了,我有同样的问题与管理形式。因此,我看不到自己初始化表单的方法-向它传递请求。
先谢谢你了。
我的问题和这个很相似:How do I access the request object or any other variable in a form's clean() method?
除了,我有同样的问题与管理形式。因此,我看不到自己初始化表单的方法-向它传递请求。
先谢谢你了。
3条答案
按热度按时间1wnzp6jl1#
您需要
ModelAdmin.get_form()
提供的subclass form并覆盖它:xxls0lw82#
这个解决方案对我有效。您可以在表单中的任何地方使用
self.request
,包括def clean(self)
e7arh2l63#
在
ModelAdmin
类中有许多钩子允许你这样做--看看django.contrib.admin.options
中的代码。有两个方法可能会对您有所帮助:
ModelAdmin.save_form
和ModelAdmin.save_model
,这两个方法都传递了请求对象。因此,您可以在Admin子类中覆盖这些方法,并执行所需的任何额外处理。评论后编辑
您说得很对,这不会让您根据用户的权限来验证表单。不幸的是,表单示例化被深埋在
ModelAdmin
的add_view
和change_view
方法中。如果不复制大量现有代码,就没有太多的可能性。您可以重写
*_view
方法;或者你可以尝试覆盖modelform_factory
函数,返回一个新的类,其中已经包含了request对象;或者你可以尝试摆弄表单类__new__
方法来做同样的事情,但这很棘手,因为表单元类。