'Django - __init__() missing 1 required positional argument: 'request'

I have the following error:

CompareFormTransporterCompany.__init__() missing 1 required positional argument: 'request'

Here is my form in forms.py:

class CompareFormTransporterCompany(forms.ModelForm):
    file = forms.FileField(label="File (CSV, XLSX, XML) ", required=True)
    name_transporter = forms.ModelChoiceField(label='Choose transporter', required=True, queryset=Transporter.objects.all())

    class Meta:
        model = CheckFile
        fields = ['file',]


    def __init__(self, request, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.request = request

    def clean(self):
        super().clean()
        uploaded = parse_csv(self.request.FILES['file'])

In views.py:

class ResultFormView(FormView):
    """ View to show results of comparison between two files. """

    template_name = 'tool/upload.html'
    form_class = CompareFormTransporterCompany
    success_url = reverse_lazy('tool:result')

And my model in models.py if needed:

class CheckFile(models.Model):
    name = models.CharField(max_length=200, blank=True)
    month = models.DateField(blank=True, null=True)
    timestamp = models.DateTimeField(blank=True, null=True)
    profile = models.CharField('Choix du profil', blank=False, choices=PROFILE_CHOICES, max_length=100, default="Client")
    file = models.FileField(blank=True, null=True, upload_to="uploads/", validators=[validate_file_extension])

    def __str__(self):
        return self.name

    class Meta:
        verbose_name = "file"
        verbose_name_plural = "files"

I have been trying a lot of different solutions but I don't understand the error. Could you please help me?



Solution 1:[1]

Thought it came from my form but it came from views.py. I have:

class RequestFormMixin:
    """Mixin to inject the request in the form."""

    def get_form_kwargs(self):
        kwargs = super().get_form_kwargs()
        kwargs["request"] = self.request
        return kwargs


'''
Form result2:
'''

class ResultFormView(RequestFormMixin, FormView):
    """ View to show results of comparison between two files. """

    template_name = 'tool/upload.html'
    form_class = CompareFormTransporterCompany
    success_url = reverse_lazy('tool:result')

By changing class ResultFormView(FormView): to class ResultFormView(RequestFormMixin, FormView):, it's working.

Sorry for this question, I'm still pretty new to Django and I didn't give all the informations needed.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Vincent