此字段是必填项。Django中ImageField和FileField的错误

9 投票
2 回答
13626 浏览
提问于 2025-04-18 06:21

我刚开始学习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()

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

2 个回答

1

在 forms.py 文件中

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

首先,在你的模型里,把字段设置为空和可为空:

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

不过,模型部分是必须的。否则,你可能会遇到数据库不一致的错误。

记住,blanknull 是不同的概念。不过,它们可以很好地配合使用,应该能满足你的需求。

撰写回答