此字段是必需的。Django 上的 ImageField 和 FileField 错误

new*_*mer 5 python forms django model

我是 Django 的新手,我使用的是 Django 1.6.1 并且在我的一个表单中出现下一个错误

 This field is required.
Run Code Online (Sandbox Code Playgroud)

我不明白为什么会出现此错误,我的表单非常基本,因此我的模型,引发此错误的语句是 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))
Run Code Online (Sandbox Code Playgroud)

我的表格是:

class campoImagenForm(forms.ModelForm):
    class Meta:
        model = campoImagen
        fields = ('imagen',)
Run Code Online (Sandbox Code Playgroud)

我的模型是:

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

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

sam*_*amu 5

首先,在模型中将字段设置为空且可为空:

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

然后在模型表单中更改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
Run Code Online (Sandbox Code Playgroud)

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

请记住,空白是不同的东西。然而,它们确实可以很好地协同工作,并且应该给您带来您想要的东西。