'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 |
