How to use the request in a ModelForm in Django

后端 未结 2 603
我寻月下人不归
我寻月下人不归 2020-12-01 04:39

I would like to make a queryset where the current user is used as a filter in a ModelForm:

class BookSubmitForm(ModelForm):
    book = forms.ModelChoiceField         


        
2条回答
  •  死守一世寂寞
    2020-12-01 05:11

    Extending AdamKG answer to class based views - override the get_form_kwargs method:

    class PassRequestToFormViewMixin:
        def get_form_kwargs(self):
            kwargs = super().get_form_kwargs()
            kwargs['request'] = self.request
            return kwargs
    
    from django.views.generic.edit import CreateView
    class BookSubmitCreateView(PassRequestToFormViewMixin, CreateView):
        form_class = BookSubmitForm
    # same for EditView
    

    and then in forms:

    from django.forms import ModelForm
    class BookSubmitForm(ModelForm):
        def __init__(self, *args, **kwargs):
            self.request = kwargs.pop("request")
            super().__init__(*args, **kwargs)
            ...
    

提交回复
热议问题