Search code examples
pythondjango-1.7

Django: Why does my image field form not validate?


I have this model:

fs = FileSystemStorage(location='/var/tmp/media/uploads/photos')

class Picture(models.Model):
  """ vom user hochgeladenes bild """
  image_field = models.ImageField(storage=fs)
  user = models.ForeignKey('auth.User')

And this form:

class PictureForm(ModelForm):
  class Meta:
    model = Picture
    fields = ['user','image_field',]

But when I try to validate, it won't work!

class PictureAddView(View):
  def get(self,request):
    picture_form = PictureForm()
    context = {'picture_form': picture_form,}
    return render(request, 'picturevault/picture_add.html', context)
  def post(self,request):
    from PIL import Image
    Image.init()
    picture_form = PictureForm(request.POST,request.FILES)
    if picture_form.is_valid():
      messages.add_message(request, messages.SUCCESS, 'picture link form valid')
    else:
      messages.add_message(request, messages.ERROR, 'picture link form invalid')
    return HttpResponseRedirect(reverse('picturevault_picture_add_view'))

Can you spot the error?

All I get is 'picture link form invalid' which means that it did not pass "picture_form.is_valid()".

Here is the template:

{% extends 'base.html' %}

{% block content %}
<form method="POST" action="" >
{% csrf_token %}
{% for field in picture_form %}
  {{ field }}
{% endfor %}
<input type="submit" value="submit" />
</form>
{% endblock %}

Solution

  • First thing I can spot is that you're missing enctype="multipart/form-data" on your HTML form tag. Without that, you can't upload files (including images) via a form.