Home > Mobile >  Get current user in Django modelformset_factory
Get current user in Django modelformset_factory

Time:11-05

I need to filter employees from same company as current user in forms.py. But the solution I found, work only for single Formsets.

If I try to pass the request.user with modelformset_factory to generate a multiple formset, I get the following Error:

'MassnahmeForm' object has no attribute '__name__'

What can i Do?

Best regards Bostjan

views.py:

frm = MassnahmeForm(user=request.user)
mformset = modelformset_factory(Massnahmen, form=frm, extra=mn.count())

forms.py:

class MassnahmeForm(forms.ModelForm):
    id = forms.IntegerField(widget=forms.HiddenInput())
    pdca = forms.IntegerField(widget=forms.HiddenInput())
    status = forms.IntegerField(widget=forms.HiddenInput())

    def __init__(self, *args, **kwargs):
        self.user = kwargs.pop('user', None)
        print(self.user)
        super(MassnahmeForm, self).__init__(*args, **kwargs)

    class Meta:
        model = Massnahmen
        widgets = {
         'massnahme': forms.Textarea(attrs={'onkeyup':'resizeTextarea()', 'rows': 3, 'style': 'margin: -5px;'
                                            'width: 100%;'
                                            'height: 100%;'}),

         'umsetzer': forms.Select(choices=users, attrs={'style': 'width: 100%;'
                                                                 'margin: 0px;'
                                                                 'font-size: 100%;'
                                                                 'padding: 0px'}),

         'termin': forms.DateInput(attrs={'class': 'flatpickr flatpickr-input active',
                                          'placeholder': 'Termin',
                                          'readonly': 'readonly',
                                          'style': 'width: 100%;'
                                                   'margin: 0px;'
                                                   'font-size: 100%;'
                                                   'padding: 0px'}),

        }
        fields = ('massnahme','umsetzer','termin','status')

CodePudding user response:

You need use the Class of the form in the modelformset_factory, not one instance. Next, you can make use of the form_kwargs parameter in the Formset.

MassnahmeFormSet = modelformset_factory(
    model = Massnahme,
    form = MassnahmeForm,
    extra = mn.count()
)
formset = MassnahmeFormSet(form_kwargs={'user': request.user})

  • Related