ОБНОВЛЕНО 10/25/2011 : сейчас я использую это с метаклассом вместо метода, поскольку Django 1.3 отображает некоторые странности в противном случае.
class MyModelAdmin(admin.ModelAdmin):
form = MyCustomForm
def get_form(self, request, obj=None, **kwargs):
ModelForm = super(MyModelAdmin, self).get_form(request, obj, **kwargs)
class ModelFormMetaClass(ModelForm):
def __new__(cls, *args, **kwargs):
kwargs['request'] = request
return ModelForm(*args, **kwargs)
return ModelFormMetaClass
Затем переопределите MyCustomForm.__init__
следующим образом:
class MyCustomForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
self.request = kwargs.pop('request', None)
super(MyCustomForm, self).__init__(*args, **kwargs)
Затем вы можете получить доступ к объекту запроса из любого метода ModelForm
с помощью self.request
.