这是必填栏。 Django 上的 ImageField 和 FileField 错误

Posted

技术标签:

【中文标题】这是必填栏。 Django 上的 ImageField 和 FileField 错误【英文标题】:This field is required. Error with ImageField and FileField on Django 【发布时间】:2014-06-30 13:26:32 【问题描述】:

我是 Django 新手,我使用的是 Django 1.6.1,在我的一个表单中,我收到下一个错误

 This field is required.

我不明白为什么会出现这个错误,我的表单很基础,所以我的模型,启动这个错误的语句是 form.is_valid(),但我不知道为什么。 一些帮助将不胜感激。

我的看法是:

if request.method == 'POST':
    form = campoImagenForm(request.POST, request.FILES)
    if form.is_valid():
        articulo = form.save(commit=False)
        articulo.item = item
        articulo.atributo = atributo
        articulo.save()
        return HttpResponseRedirect('/workproject/' + str(project.id))

我的表格是:

class campoImagenForm(forms.ModelForm):
    class Meta:
        model = campoImagen
        fields = ('imagen',)

我的模特是:

class campoImagen(models.Model):
    item = models.ForeignKey(ItemBase)
    atributo = models.ForeignKey(TipoItem)
    imagen = models.ImageField(verbose_name='Imagen', upload_to='archivos')
    version = models.IntegerField()

我不知道为什么会出现这样的错误。

【问题讨论】:

【参考方案1】:

首先,在您的模型中使您的字段为空且可为空:

class campoImagen(models.Model):
    # [...]
    imagen = models.ImageField(verbose_name='Imagen', upload_to='archivos', null=True, blank=True)

然后在您的模型表单中更改您字段的required 参数:

class campoImagenForm(forms.ModelForm):
    class Meta:
        model = campoImagen
        fields = ('imagen',)

    def __init__(self, *args, **kwargs):
        super(campoImagenForm, self).__init__(*args, **kwargs)
        self.fields['imagen'].required = False

但是,模型部分是强制性的。否则您可能会遇到数据库不一致错误。

请记住,blank 和 null 是不同的东西。但是,它们确实可以很好地协同工作,并且应该可以满足您的需求。

【讨论】:

【参考方案2】:

在forms.py中

class campoImagenForm(forms.ModelForm):
    imagen = forms.ImageField(verbose_name='Imagen', upload_to='archivos', required = False)
    class Meta:
        model = campoImagen
        fields = ('imagen',)

【讨论】:

以上是关于这是必填栏。 Django 上的 ImageField 和 FileField 错误的主要内容,如果未能解决你的问题,请参考以下文章

模型表单中的 Django 必填字段

Django Rest Framework render_form & 必填字段

Django ModelForm booleanfield 必填字段不起作用

需要在 Django Formset 中有一个必填字段和可选字段

在 Django 中将模型字段设置为必填

Django,模型和表单:替换“此字段为必填项”消息