title: Form and File Uploading in Django
body: <p>I have been trying to figure out what is going wrong when I try to submit a form.
  I get this response on the web page when I hit submit on the form:</p>
  
  <pre><code>Image:
      This field is required.
  </code></pre>
  
  <p>It seems to think I have not included an image in the form!</p>
  
  <h2><strong>settings.py</strong></h2>
  
  <pre><code>...
  DATABASES = {
      'default': {
          'ENGINE': 'django.db.backends.sqlite3',
          'NAME': '/path/to/myproject/database/sqlite.db'),
          'USER': '',
          'PASSWORD': '',
          'HOST': '',
          'PORT': '',
      }
  }
  ...
  MEDIA_ROOT = '/path/to/myproject/media/'
  MEDIA_URL = '/media/'
  ...
  INSTALLED_APPS = (
      ...
      'myapp',
  )
  </code></pre>
  
  <h2><strong>models.py</strong></h2>
  
  <pre><code>from PIL import Image
  from django import forms
  from django.db import models
  from django.forms import ModelForm
  
  UPLOADER_CHOICES = (
      ('C', 'Common User'),
      ('N', 'Nutrition Kitchen'),
  )
  
  class Meal(models.Model):
  
      title       = models.CharField(max_length=100)
      slug        = models.SlugField(unique=True)
      image       = models.ImageField(upload_to='images/')
      serves      = models.IntegerField()
      ingredients = models.CharField(max_length=1000)
      instructions= models.CharField(max_length=1000)
      time_period = models.IntegerField()# in minutes
      uploader    = models.CharField(max_length=1, choices=UPLOADER_CHOICES)
  
  def __unicode__(self):
      return self.title
  </code></pre>
  
  <h2><strong>forms.py</strong></h2>
  
  <pre><code>from django import forms
  from meal.models import Meal
  
  class MealForm(forms.Form):
  
      title       = forms.CharField(max_length=100)
      image       = forms.ImageField()
      ingredients = forms.CharField(max_length=1000)
      instructions= forms.CharField(max_length=1000)
      time_period = forms.IntegerField(required=False)
      serves      = forms.IntegerField(required=False)
  </code></pre>
  
  <h2><strong>views.py</strong></h2>
  
  <pre><code>from django.shortcuts import render_to_response
  from django.template import RequestContext
  from django.http import HttpResponseRedirect
  from django.shortcuts import render_to_response
  from meal.models import Meal
  from meal.forms import MealForm
  
  def upload(request):
      if request.method == 'POST':
          form = MealForm(request.POST, request.FILES)
          if form.is_valid():
              form.save()
              return render_to_response('upload.html', {'form': form})
      else:
          form = MealForm()
      return render_to_response('upload.html', {'form': form}, context_instance=RequestContext(request)
      )
  </code></pre>
  
  <h2><strong>upload.html</strong></h2>
  
  <pre><code>{% extends "base.html" %}
  {% block content %}
  {% if form.errors %}
          &lt;p style="color: red;"&gt;
              Please correct the error{{ form.errors|pluralize }} below.
          &lt;/p&gt;
  {% endif %}
  &lt;div data-role="content" style="padding: 15px"&gt;
      &lt;form action="" method="POST" enctype="multipart/form-data"&gt;
              {% csrf_token %}
              {{ form.errors }}
              {{ form.non_field_errors }}
              {{ form.as_table }}
          &lt;input type="submit" value="Submit" id="Save"&gt;
      &lt;/form&gt;
  &lt;/div&gt;
  {% endblock %}
  </code></pre>
  
  <p>Does anyone have any ideas about what I could be doing wrong? I feel like I've tried everything.</p>