«Это поле обязательно для заполнения», когда все поля заполнены в Django - PullRequest
0 голосов
/ 20 мая 2019

При заполнении формы я получаю «Это поле обязательно для заполнения».даже если все поля заполнены.

Это не связано с необходимостью установки False или чего-то подобного, потому что все поля обязательны для заполнения.

views.py

def upload(request):
    if request.method == 'POST':
        form = UploadFileForm(request.POST, request.FILES)
        if form.is_valid():
            title = form.cleaned_data['title']
            username = request.user.get_username()
            category = form.cleaned_data['category']
            handle_uploaded_file(request.FILES['file'],title,username,category)
            return HttpResponseRedirect('')
    else:
        form = UploadFileForm()
    return render(request, 'main/upload.html', {'form': form})

function

def handle_uploaded_file(f,title,username,category):
    with open('/uploads/' + category + '/' + title, 'wb+') as destination:
        for chunk in f.chunks():
            destination.write(chunk)

forms.py

class UploadFileForm(forms.Form):
        title = forms.CharField(max_length=50)
        category = forms.CharField(max_length=50)
        file = forms.FileField()

upload.html

{% extends 'base.html' %}

{% block title %}Upload{% endblock %}

{% block content %}
{% if user.is_authenticated %}
  Uploading as: {{ user.username }}
  <form method="post"> 
    {% csrf_token %}
    {{ form.as_p }}
    <input type="submit" value="Submit"/>
    </form>
{% else %}
  <p>You are not logged in</p>
  <a href="{% url 'login' %}">login</a>
{% endif %}
{% endblock %}

Ошибка при заполнении формы:«Это поле обязательно для заполнения»

Снимок экрана:

enter image description here

Когда я выбираю файл и выдает ошибку, он отменяет выбор любого файла, который явыбран, подобно тому, как поле пароля очищается при нажатии зарегистрироваться, не заполняя каждое поле.

1 Ответ

2 голосов
/ 20 мая 2019

Файл не отправлен с запросом, поскольку вы не отправили правильный enctype для элемента form. Вот документы Джанго относительно этого.

<form method="post" enctype="multipart/form-data"> 

Один из способов проверить это / отладить это распечатать данные формы form.data, request.POST и / или request.FILES перед вызовом is_valid. Или проверка запроса в инструментах разработчика браузера.

...