Empty request FILES in django

Question:

I have a Django model containing a fileField and a ModelForm which requests the user upload a file. Yet no matter what I seem to do, the request.FILES returned by the server does not contain anything. Here is the model:

class RepoFile(models.Model):
    id = models.IntegerField(primary_key=True)
    repo = models.FileField(blank=False, null=True, upload_to="repos/")

The ModelForm:

class RepoUpload(forms.ModelForm):
    class Meta:
        model = RepoFile
        fields = ['repo']
        widgets = {
            'repo': ClearableFileInput(),
        }

And the HTML

<form action="" method="post" enctype="multipart/form-data">{% csrf_token %}
    {{ form }}
    <input type="submit" value="Submit" />
</form>

Also here is the view that I am using:

    form = RepoUpload(request.FILES)
    if form.is_valid():
        print('this passed')
        form.save()

I noticed that no matter what file I upload in the "Choose File" section, the form.is_valid() returns false. If I just use HTML and the view to send request.FILES to a manually created object, len(request.FILES) returns 0. Does anyone know of a solution?

Asked By: agctute

||

Answers:

you have a wrong init args in form, right is that:

form = RepoUpload(request.POST, request.FILES)

To avoid this error, is better to use:

form = RepoUpload(data=request.POST, files=request.FILES, )

additional kwargs for init:

data=None, 
files=None, 
auto_id='id_%s', 
prefix=None,
initial=None, 
error_class=ErrorList, 
label_suffix=None,
empty_permitted=False,
field_order=None,
use_required_attribute=None,
renderer=None

Read more here:
https://docs.djangoproject.com/en/4.0/ref/forms/api/#django.forms.Form

Answered By: Maxim Danilov
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.