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】:删除等于True
的blank 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() 为真