Python 如果设置了默认值,则不会删除Django ImageField

Python 如果设置了默认值,则不会删除Django ImageField,python,django,Python,Django,型号: 当我试图清空管理员中的字段时,单击其复选框,文件不会被删除,除非我从模型中删除默认属性!为什么?模型字段中的默认属性正是为了这个目的: 如果对象没有水印图像属性,请使用默认图像。 为什么这很重要? 想象一下,如果有一个字段不能为空,否则会导致数据库不一致 例如,如果您的用户模型有一个profile\u picture字段 当在如下列表中的用户列表中循环时: class MyModel(models.Model): watermark_image = models.ImageFie

型号:


当我试图清空管理员中的字段时,单击其复选框,文件不会被删除,除非我从模型中删除默认属性!为什么?

模型字段中的默认属性正是为了这个目的:
如果对象没有水印图像属性,请使用默认图像。 为什么这很重要? 想象一下,如果有一个字段不能为空,否则会导致数据库不一致

例如,如果您的用户模型有一个profile\u picture字段

当在如下列表中的用户列表中循环时:

class MyModel(models.Model):
    watermark_image = models.ImageField(null=True, blank=True, default=settings.WATERMARK_DEFAULT)
当您在模型级别为profile_picture属性设置了默认值时,您不必担心此代码。如果您没有该默认值,此代码可能会为没有配置文件图片集的用户引发AttributeError


因此,不可能删除在管理中设置了默认值的属性,因为这将消除模型属性中默认关键字参数的用途。

我需要这种行为,但问题是,当我删除文件并单击“保存”时,图像不会被模型属性的默认值Remove blank=True,null=True替换,因为这些字段允许该属性上的空条目,这样做有效吗?我正在尝试迁移,但返回此错误:django.db.utils.DataError:值太长,无法更改类型字符(100)如果这只是一个开发数据库,并且数据丢失没有问题,请尝试从模型中删除水印图像字段,进行迁移,然后重新声明该字段,而不使用blank=True、null=True值。小心从模型中删除此属性将删除对保存在现有模型中的图像的所有引用。
[user.profile_picture for user in User.objects.all()]