无法使用图像验证django表单

无法使用图像验证django表单,django,django-forms,django-views,django-models,Django,Django Forms,Django Views,Django Models,我在制作表格时遇到了麻烦。在我看来,一切都很好,但是is\u valid()总是返回False(我必须在shell模式下检查它,因为在模板中它没有显示任何错误)。我错过什么了吗 如果有人想测试它,可以从 forms.py from django.forms import ModelForm from e_cidadania.apps.spaces.models import Space class SpaceForm(ModelForm): class Meta: mo

我在制作表格时遇到了麻烦。在我看来,一切都很好,但是
is\u valid()
总是返回False(我必须在shell模式下检查它,因为在模板中它没有显示任何错误)。我错过什么了吗

如果有人想测试它,可以从

forms.py

from django.forms import ModelForm
from e_cidadania.apps.spaces.models import Space

class SpaceForm(ModelForm):
    class Meta:
        model = Space
@permission_required('Space.add_space')
def create_space(request):

space = Space()
if request.POST:
    form = SpaceForm(request.POST, request.FILES, instance=space)
    if form.is_valid():
        handle_uploaded_file(request.FILES['file'])
        form.author = request.user
        form.date = datetime.datetime.now()
        form.save()
        return render_to_response('/')
else:
    form = SpaceForm()
return render_to_response('spaces/add.html',
                         {'form': form},
                         context_instance=RequestContext(request)) 
class Space(models.Model):

    name = models.CharField(_('Name'), max_length=100, unique=True,
                            help_text=_('All lowercase. Obligatory.'))
    description = models.TextField(_('Description'))
    date = models.DateTimeField(auto_now_add=True)
    author = models.ForeignKey(User, verbose_name=_('Author'))
    logo = models.ImageField(upload_to='spaces/logos',
                             verbose_name=_('Logotype'),
                             help_text=_('100px width, 75px height'))
    banner = models.ImageField(upload_to='spaces/banners',
                               verbose_name=_('Banner'),
                               help_text=_('75px height'))
    authorized_groups = models.ManyToManyField(Group,
                                               verbose_name=_('Authorized groups'))

    mod_debate = models.BooleanField(_('Debate module'))
    mod_proposals = models.BooleanField(_('Proposals module'))
    mod_news = models.BooleanField(_('News module'))
    mod_cal = models.BooleanField(_('Calendar module'))
    mod_docs = models.BooleanField(_('Documents module'))
视图.py

from django.forms import ModelForm
from e_cidadania.apps.spaces.models import Space

class SpaceForm(ModelForm):
    class Meta:
        model = Space
@permission_required('Space.add_space')
def create_space(request):

space = Space()
if request.POST:
    form = SpaceForm(request.POST, request.FILES, instance=space)
    if form.is_valid():
        handle_uploaded_file(request.FILES['file'])
        form.author = request.user
        form.date = datetime.datetime.now()
        form.save()
        return render_to_response('/')
else:
    form = SpaceForm()
return render_to_response('spaces/add.html',
                         {'form': form},
                         context_instance=RequestContext(request)) 
class Space(models.Model):

    name = models.CharField(_('Name'), max_length=100, unique=True,
                            help_text=_('All lowercase. Obligatory.'))
    description = models.TextField(_('Description'))
    date = models.DateTimeField(auto_now_add=True)
    author = models.ForeignKey(User, verbose_name=_('Author'))
    logo = models.ImageField(upload_to='spaces/logos',
                             verbose_name=_('Logotype'),
                             help_text=_('100px width, 75px height'))
    banner = models.ImageField(upload_to='spaces/banners',
                               verbose_name=_('Banner'),
                               help_text=_('75px height'))
    authorized_groups = models.ManyToManyField(Group,
                                               verbose_name=_('Authorized groups'))

    mod_debate = models.BooleanField(_('Debate module'))
    mod_proposals = models.BooleanField(_('Proposals module'))
    mod_news = models.BooleanField(_('News module'))
    mod_cal = models.BooleanField(_('Calendar module'))
    mod_docs = models.BooleanField(_('Documents module'))
型号.py

from django.forms import ModelForm
from e_cidadania.apps.spaces.models import Space

class SpaceForm(ModelForm):
    class Meta:
        model = Space
@permission_required('Space.add_space')
def create_space(request):

space = Space()
if request.POST:
    form = SpaceForm(request.POST, request.FILES, instance=space)
    if form.is_valid():
        handle_uploaded_file(request.FILES['file'])
        form.author = request.user
        form.date = datetime.datetime.now()
        form.save()
        return render_to_response('/')
else:
    form = SpaceForm()
return render_to_response('spaces/add.html',
                         {'form': form},
                         context_instance=RequestContext(request)) 
class Space(models.Model):

    name = models.CharField(_('Name'), max_length=100, unique=True,
                            help_text=_('All lowercase. Obligatory.'))
    description = models.TextField(_('Description'))
    date = models.DateTimeField(auto_now_add=True)
    author = models.ForeignKey(User, verbose_name=_('Author'))
    logo = models.ImageField(upload_to='spaces/logos',
                             verbose_name=_('Logotype'),
                             help_text=_('100px width, 75px height'))
    banner = models.ImageField(upload_to='spaces/banners',
                               verbose_name=_('Banner'),
                               help_text=_('75px height'))
    authorized_groups = models.ManyToManyField(Group,
                                               verbose_name=_('Authorized groups'))

    mod_debate = models.BooleanField(_('Debate module'))
    mod_proposals = models.BooleanField(_('Proposals module'))
    mod_news = models.BooleanField(_('News module'))
    mod_cal = models.BooleanField(_('Calendar module'))
    mod_docs = models.BooleanField(_('Documents module'))

form.errors
是否显示无错误

当涉及文件时,请检查
request.files
是否确实有文件

确保您的
具有
。。在许多情况下,这是罪魁祸首

谷歌对该错误的所有搜索结果都围绕着PIL。尤其是当你在mac电脑上的时候



Yuji可能回答了您的问题,但我想给出一个如何使视图更清晰的提示(同样的意思,代码少一点,可读性相同或更好):


我不知道这是否会有帮助,但一旦我在检查用户权限时出错,就会提交表单,这就产生了一个窍门:

   if form.is_valid():
        new_space = form.save(commit = False)
        new_space.author = request.user
        ...
        new_space.save()

问题是模型字段author和date没有声明为blank=True,null=True。因为表单从未验证过,因为即使您没有提交save(),save命令也会验证表单。

是的,我将其声明为多部分表单,is_multipart()返回True。我还没有试过form.errors(真丢脸!)是的,让我们看看表单是否有任何抱怨。它抱怨图像文件,说:“上传一个有效的图像。你上传的文件不是图像或者是损坏的图像。”但我检查了文件,它们工作得很好。还尝试了其他具有相同结果的图像。您最近是否将代码从一个位置移动到另一个位置?你用PIL吗?最近,当我不小心将PIL从OSX机器带到live production server时,我遇到了这个错误。PIL已正确安装,并且我尚未移动任何代码:)