【发布时间】:2012-09-30 12:55:29
【问题描述】:
当我尝试提交表单时,我一直试图找出问题所在。 当我在表单上点击提交时,我在网页上收到此响应:
Image:
This field is required.
好像我没有在表单中包含图片!
settings.py
...
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',
)
models.py
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
forms.py
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)
views.py
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)
)
上传.html
{% extends "base.html" %}
{% block content %}
{% if form.errors %}
<p style="color: red;">
Please correct the error{{ form.errors|pluralize }} below.
</p>
{% endif %}
<div data-role="content" style="padding: 15px">
<form action="" method="POST" enctype="multipart/form-data">
{% csrf_token %}
{{ form.errors }}
{{ form.non_field_errors }}
{{ form.as_table }}
<input type="submit" value="Submit" id="Save">
</form>
</div>
{% endblock %}
有没有人知道我可能做错了什么?我觉得我什么都试过了。
【问题讨论】:
-
尝试将 MealForm(forms.Form) 类更改为 MealForm(forms.ModelForm) 类,其他一切看起来都不错。
标签: django forms file-upload