Django:从admin的form.clean()访问请求对象 [英] Django: Access request object from admin's form.clean()
本文介绍了Django:从admin的form.clean()访问请求对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我的问题与此类似:如何在表单的clean()方法中访问请求对象或任何其他变量?
除了我有与管理表单相同的问题。所以我看不到一种方式来初始化自己的表单,所以 - 传递一个请求给它。
Except, I have the same problem with admin form. So I can't see a way to init the form myself, therefore - to pass a request to it.
事先感谢。
推荐答案
确实有办法解决你的问题!
Indeed, there is a way to solve your issue!
您将需要子类型,由 ModelAdmin.get_form()
并覆盖它:
You will need to subclass form provided by ModelAdmin.get_form()
and override it:
class BusinessDocumentCommentForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
self.request = kwargs.pop('request', None)
# Voila, now you can access request anywhere in your form methods by using self.request!
super(BusinessDocumentCommentForm, self).__init__(*args, **kwargs)
if self.request.GET.get('document_pk', False):
#Do something
def clean(self):
# Do something with self.request
# etc.
class Meta:
model = BusinessDocumentComment
class BusinessDocumentCommentAdmin(admin.ModelAdmin):
form = BusinessDocumentCommentForm
def get_form(self, request, obj=None, **kwargs):
AdminForm = super(BusinessDocumentCommentAdmin, self).get_form(request, obj, **kwargs)
class AdminFormWithRequest(AdminForm):
def __new__(cls, *args, **kwargs):
kwargs['request'] = request
return AdminForm(*args, **kwargs)
return AdminFormWithRequest
这篇关于Django:从admin的form.clean()访问请求对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文