Для новых читателей: решение Neverwalkaloner решило первоначальную ошибку, но загрузка фотографий по-прежнему требуется, и создание требуемого значения false в forms.py дает мне MultiValueDictKeyError.Буду очень признателен за любую помощь в том, чтобы сделать его необязательным.
У меня есть модель и форма для загрузки либо рисунка и текста, либо просто текста.На самом деле я намеревался сделать выбор между изображением, текстом или обоими, и любая помощь с этим была бы признательна, но я отступаю.Загрузка работает только когда изображение включено, если это просто текст, я получаю сообщение об ошибке:
The view lesyeux.views.posts didn't return an HttpResponse object. It
returned None instead.The view lesyeux
Моя модель:
class Post(models.Model):
image = models.ImageField(upload_to='uploaded_images', blank=True,
null=True)
text_post = models.CharField(max_length=1000)
author = models.ForeignKey(User)
Моя форма:
class PostForm(forms.ModelForm):
image = forms.FileField(label='Select an image file',
help_text='Please select a photo to upload')
text_post = forms.CharField(help_text="Please enter some text.")
class Meta:
model = Post
fields = ('image', 'text_post',)
exclude = ('author',)
На мой взгляд:
def posts(request, id=None):
neighborhood = get_object_or_404(Neighborhood, id=id)
form = PostForm()
if request.method == 'POST':
form = PostForm(request.POST, request.FILES)
if form.is_valid():
post = Post(image = request.FILES['image'])
post = form.save(commit=False)
post.author = request.user
post = post.save()
next = request.POST.get('next', '/')
return HttpResponseRedirect(next)
else:
form = PostForm()
posts = Post.objects.all().order_by('-id')
return render(request, 'posts.html', context = {'form':form,
'posts':posts, 'neighborhood':neighborhood})
и моя форма:
<form id="PostForm" method="post" action="/view/{{ neighborhood.id }}/posts/" enctype="multipart/form-data">
{% csrf_token %}
{% for hidden in form.hidden_fields %}
{{ hidden }}
{% endfor %}
{% for field in form.visible_fields %}
{{ field.errors }}
{{ field.help_text }}
{{ field }}
{% endfor %}
<input type="hidden" name="next" value="{{ request.path }}">
<input type="submit" name="submit" value="Post" />
</form>