Django model based forms - почему форма не валидна?

Я пытаюсь сделать форму на основе модели, но что-то пошло не так.

модель:

class Topic(models.Model):
    name = models.CharField(max_length=200)
    icon = models.ImageField(upload_to = 'images/')

Форма:

class TopicCreationForm(ModelForm):
    class Meta:
        model = Topic
        fields = '__all__'

view:

def TopicCreateView(request):
    form = TopicCreationForm()
    if request.method == 'POST':
        form = TopicCreationForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('home')
        else:
            print('aaa') # It displays in console
    

    context = {'form':form}
    return render(request, 'blog/topic_form.html', context)

моя форма html часть

<form method="POST">
   {% csrf_token %}
   <fieldset >
       <legend> New Topic</legend>
       {{ form|crispy }}               
   </fieldset>
   <div>
       <input type="submit" value="submit" class="button-33" role="button">
   </div>
</form>

где я допустил ошибку?

Вам нужно передать и request.POST, и request.FILES [Django-doc], поэтому:

def topic_create(request):
    if request.method == 'POST':
        form = TopicCreationForm(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            return redirect('home')
        else:
            print('aaa') # It display in console
    else:
        form = TopicCreationForm()
    context = {'form':form}
    return render(request, 'blog/topic_form.html', context)

В HTML-форме необходимо указать, что файлы должны быть закодированы с помощью атрибута enctype="…" [mdn]:

<form method="post" enctype="multipart/form-data">
    …
</form>
Вернуться на верх