Django ImageField 为空时覆盖现有路径

Posted

技术标签:

【中文标题】Django ImageField 为空时覆盖现有路径【英文标题】:Django ImageField overwrites existing path when empty 【发布时间】:2014-05-21 00:22:00 【问题描述】:

所以,这就是问题所在: 我目前有一个模型:

类用户数据(模型。模型): 头像 = models.ImageField(verbose_name='Avatar',upload_to='images/profile_pics',blank=True,null=True) doc_type = models.CharField(verbose_name='文档类型',max_length=1,default='0')

还有一个表格:

类 UserCreationForm(forms.ModelForm): 头像 = forms.ImageField(label='Avatar',required=False, error_messages = 'invalid':"仅限图片", widget=forms.FileInput) 元类: 模型 = 用户数据

因此,当用户尝试编辑他的数据时,就会出现问题。如果未提供图像,则 db 中的当前图像路径将覆盖为空字符串。有没有办法解决这个问题?

【问题讨论】:

您可以将自己的 save() 方法编程到表单中。 那么,我得先看看图片有没有提供,然后再决定是否保存? 没错,如果您的表单发送了一个空值,请忽略它,否则设置发送值... 为什么要覆盖表单中的头像字段? 【参考方案1】:

删除等于Trueblank and null

blank=True

允许字段为空

null=True

允许将空数据保存在数据库中

因此您可以选择最适合您的。

【讨论】:

【参考方案2】:

您可以通过将图像字段设为必填来解决问题。

avatar = forms.ImageField(label='Avatar', required=True, error_messages='invalid':"Images only", widget=forms.FileInput)

【讨论】:

【参考方案3】:
avatar = models.ImageField(verbose_name='Avatar',upload_to='images/profile_pics',null=True)

删除blank=True 应该可以解决它

【讨论】:

以上是关于Django ImageField 为空时覆盖现有路径的主要内容,如果未能解决你的问题,请参考以下文章

当过滤字符串为空时,如何停止 Graphql + Django-Filters 返回所有对象?

当多个输入可以为空时,在 Django 中使用 Q 进行过滤

Django ImageField 文件保存时处理图像(剪切,再次上传,旋转等)

当值为空时,Django modelSerializer form.is_valid() 为真

如何使用ImageField模型调整使用Django上传的图像文件的大小? [关闭]

如何在Django Admin中将ImageField限制为几个选项