2016-05-18 11 views
4

Wie kann ich auf Anfrage in __init__ Formular zugreifen?Zugriffsanfrage in __init__ in ModelForm

forms.py

class MyForm(forms.ModelForm): 

    def __init__(self, *args, **kwargs): 
     self.request = kwargs.pop('request', None) 
     super(MyForm, self).__init__(*args, **kwargs) 


    def clean(self): 
     ... access the request object via self.request ... 

views.py

myform = MyForm(request.POST, request=request) 

aber was, wenn ich Klasse verwenden, basierte Ansichten FormView?

Antwort

4

Wenn Sie Anfrage zugreifen müssen in Ihrem MyForm Sie die FormView.get_form_kwargs Methode außer Kraft setzen kann.

def get_form_kwargs(self): 
    kwargs = super().get_form_kwargs() 
    kwargs.update({'request': self.request}) 
    return kwargs 

FormView source

class FormMixin(ContextMixin): 
    ... 
    def get_form(self, form_class=None): 
     """ 
     Returns an instance of the form to be used in this view. 
     """ 
     if form_class is None: 
      form_class = self.get_form_class() 
     return form_class(**self.get_form_kwargs()) 

    def get_form_kwargs(self): 
     """ 
     Returns the keyword arguments for instantiating the form. 
     """ 
     kwargs = { 
      'initial': self.get_initial(), 
      'prefix': self.get_prefix(), 
     } 

     if self.request.method in ('POST', 'PUT'): 
      kwargs.update({ 
       'data': self.request.POST, 
       'files': self.request.FILES, 
      }) 
     return kwargs 
     if form_class is None: 
      form_class = self.get_form_class() 
     return form_class(**self.get_form_kwargs())