Django форма FileField ошибка «Это поле обязательно для заполнения» - PullRequest
0 голосов
/ 17 января 2019

Я получаю Это поле является обязательным при использовании формы, которую генерирует django.
У меня есть модель сканирования, которая выглядит следующим образом:

class Scan(models.Model):
    device = models.ForeignKey(Device, null=True, on_delete=models.SET_NULL)
    created_at = models.DateTimeField('Created', auto_now=True)
    data = models.FileField(upload_to='uploads/')

    def __str__(self):
        return str("{}-{}".format(self.device, self.created_at))

У меня определено CreateView:

class ScanCreate(LoginRequiredMixin, CreateView):
    model = Scan
    fields = '__all__'

Мой URL-адрес

urlpatterns = [
    ...
    path('scan/create/', views.ScanCreate.as_view(), name='scan-create'),
    ...
]

и, наконец, шаблон scan_form.html

    {% block content %}
  <form action="" method="post">
    {% csrf_token %}
    <table>
    {{ form.as_table }}
    </table>
    <input type="submit" value="Submit">
  </form>
{% endblock %}

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

post submission 'This field is required.' error Файл был выбран для загрузки, так почему же поле отчета django обязательно для заполнения?

1 Ответ

0 голосов
/ 17 января 2019

Основная проблема в вашем коде заключается в том, что вы не используете enctype="multipart/form-data" в своей форме, поэтому, когда запрос отправляется на сервер, он не имеет файла в коллекции request.FILES.

вы должны написать HTML-код для вашей формы, например:

{% block content %}
  <form action="" method="post" enctype="multipart/form-data">
    {% csrf_token %}
    <table>
    {{ form.as_table }}
    </table>
    <input type="submit" value="Submit">
  </form>
{% endblock %}

и убедитесь, что действие указывает на правильный URL.

наконец, это документация для загрузки файлов: https://docs.djangoproject.com/en/2.1/topics/http/file-uploads/

...