Dav*_*yer 5 forms django file-upload
当我尝试提交表单时,我一直试图弄清楚出了什么问题.当我点击表单上的提交时,我在网页上收到此回复:
Image:
This field is required.
Run Code Online (Sandbox Code Playgroud)
它似乎认为我没有在表单中包含图像!
...
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',
)
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
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)
)
Run Code Online (Sandbox Code Playgroud)
{% 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 %}
Run Code Online (Sandbox Code Playgroud)
有没有人对我可能做错了什么有任何想法?我觉得我已经尝试了一切.
好吧,事实证明这是jQuery Mobile的一个问题,我之前没有提到过.我需要做的就是改变
<form action="" method="post" enctype="multipart/form-data">
Run Code Online (Sandbox Code Playgroud)
至
<form action="" method="post" enctype="multipart/form-data" data-ajax="false">
Run Code Online (Sandbox Code Playgroud)
因为jQuery试图为我处理POST.显然,当您在Django中POST到同一个URL并希望手动处理它时,您必须包括
data-ajax="false"
Run Code Online (Sandbox Code Playgroud)