Вы используете идиому request.POST or None
- которая мне не нравится, но неважно - для параметра данных, но не для параметра файлов. Поскольку вы передаете (пустое) слово для файлов, Django принимает вашу форму как связанную и, следовательно, пытается проверить ее.
Если вы настаиваете на использовании этой идиомы, вам нужно сделать это для обоих:
article_form = ArticleForm(request.POST or None, request.FILES or None)
Но на самом деле, это гораздо более Pythonic, чтобы быть явным:
if request.method == 'POST':
article_form = ArticleForm(request.POST, request.FILES)
if article_form.is_valid():
instance = article_form.save(commit=False)
instance.author = request.user
article_form.save()
return redirect('/')
else:
article_form = ArticleForm()
return render(request, 'blog/article-create.html', {'form': article_form})
Обратите внимание, вам всегда нужно перенаправить после успешного POST, как я делал выше.