Django - Форма возвращает недопустимый из-за пустого поля формы - PullRequest
1 голос
/ 17 марта 2020

В моем проекте у меня есть форма Django, которая состоит из ImageField и CharField . Я передаю эту форму своему шаблону и отображаю ее. В форме я установил атрибут method на POST . На мой взгляд, я обрабатываю этот запрос и возвращаю перенаправление в ответ.

Однако form.is_valid() возвращает False на мой взгляд, и я печатаю ошибки форм в консоли.

Вот ошибка, возвращаемая из form.errors:

<ul class="errorlist"><li>image<ul class="errorlist"><li>This field is required.</li></ul></li></ul>

Это говорит о том, что мое поле ввода ImageField пусто, однако я определенно выбираю файл для ImageField в браузере, поэтому я не знаю причину, почему он говорит, что поле ввода пустое. Мой код ниже.

forms.py:

    class CreatePost(forms.Form):
        // The field that is not being assigned a file 
        image = forms.ImageField(allow_empty_file=False, required=True, widget=forms.FileInput(attrs={'id': 'image'}))
        description = forms.CharField(max_length=100, required=False, widget=forms.TextInput(attrs={'placeholder': 'Add a caption:', 'id': 'description'}))

views.py :

def create(request):
    context = {}
    if request.method == "POST":
        form = CreatePost(request.POST)
        if form.is_valid():
            print("YES")
            return redirect('home')
        else:
            print(form.errors)
            context['error'] = 'Please enter valid form data'
    else:
        form = CreatePost()

    context['form'] = form
    return render(request, 'create.html', context)

Шаблон :

<form action="{% url 'create' %}" method="POST">
                {% csrf_token %}
                {% for field in form %}
                    {{ field }}
                    <br>
                {% endfor %}
                <button class="createBtn btn btn-primary" type="submit">Post</button>
</form>

Кто-нибудь знает проблему здесь? Спасибо.

1 Ответ

1 голос
/ 17 марта 2020

Здесь есть две проблемы:

  1. вам нужно передать оба request.POST и request.FILES в форму:

    form = CreatePost(request.POST<b>, request.FILES</b>)
  2. , чтобы в форме можно было отправлять как файлы, так и поля, необходимо указать тип кодировки для "multipart/form-data":

    <form action="{% url 'create' %}" method="POST" <b>enctype="multipart/form-data"</b>>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...