Python/Django模型覆盖清理后的数据

1 投票
1 回答
922 浏览
提问于 2025-04-15 15:51

你好,我现在正在做一个Django项目。在我的一个模型里,有一个文件上传和一个图片上传,这两个字段的参数都设置为可以留空(blank=True)。不过这里有个要求,就是这两个字段只能有一个可以留空。举个例子,如果用户上传了图片,那么就不需要再上传文件;反之,如果用户上传了文件,那么就不需要再上传图片。

我现在的问题是,我在理清这个逻辑上遇到了困难。这是在管理后台的部分,所以我知道我需要重写数据的清理过程。有没有人能帮我一下?

1 个回答

4

你只需要在ModelForm上定义一个自定义的clean()方法,这个方法会检查其中一个或两个字段是否有填写。

def clean(self):
    file_field = self.cleaned_data.get('file_field')
    image_field = self.cleaned_data.get('image_field')

    if file_field and image_field:
        raise forms.ValidationError("You should only provide one of File or Image")
    elif not file_field and not image_field:
        raise forms.ValidationError("You must provide either File or Image")

    return self.cleaned_data

撰写回答