Django模型清洁功能验证错误问题

aamkag61  于 2023-06-25  发布在  Go
关注(0)|答案(1)|浏览(122)

我有一个Django模型,具有自定义的清理功能,如下所示:

class License(models.Model):
    # fields of the model
    def clean(self):
        if condition1:
            raise ValidationError('Please correct the error!')

问题是,我的管理员用户上传一些文件所需的FileFieldLicense Model,但当我提出的ValidationError文件字段被清空,用户被迫再次上传文件。是否可以提出错误,但保留文件?
对于其他字段(如CharField),则不会发生这种情况。

vjrehmav

vjrehmav1#

您不能在表单(<input type="file">)中预先填充FileField,因为这是一个巨大的安全风险,并且会被浏览器自动阻止。
或者,您可以在验证表单并引发其他字段的ValidationErrors之前保存 * 每个 * 上传的文件 *。当重新呈现带有错误的表单时,让用户知道您已经收到了该文件,例如在表单字段add_error(https://docs.djangoproject.com/en/4.2/ref/forms/validation/)中
例如:

class LicenseAdmin(admin.ModelAdmin):
    form = LicenseAdminForm

class LicenseAdminForm(forms.ModelForm):

    def clean(self):
        cleaned_data = super().clean()
        if self.errors:
            uploaded_file = cleaned_data["upload_file"]
            save_license_upload(uploaded_file)  # Save the file

            self.add_error(
                "upload_file", f"Uploaded file:{uploaded_file} already saved!"
            )  # Let the user know you already have the file

另见:https://docs.djangoproject.com/en/4.2/ref/contrib/admin/#admin-custom-validation

相关问题