【发布时间】:2023-02-17 16:57:09
【问题描述】:
我有一个名为 avatar 的 Django 模型 ImageField。我想让用户清除他们的头像,所以Blank = True。问题是当用户清除他们的头像时,ImageField 路径现在是空的。我想要的是,将 ImageField 恢复为默认值。
模型.py
class Profile(models.Model):
AVATAR_UPLOAD_TO = "account_avatar/"
DEFAULT_AVATAR = "default.jpg"
user = models.OneToOneField(CustomUser, on_delete=models.CASCADE)
avatar = sorl.thumbnail.ImageField(upload_to=AVATAR_UPLOAD_TO, default=AVATAR_UPLOAD_TO+DEFAULT_AVATAR, blank=True, null=True)
我看到一些相关问题Django ImageField overwrites existing path when empty。但这种行为并不完全是我想要的。此答案要求用户上传新头像,因此用户无法清除自己的头像。另一个相关问题Django - How to reset model fields to their default value?。但是我不能在我的模型上实现save()方法
我尝试在 Profile 模型上实现 save() 方法,但它没有按预期工作
def save(self, *args, **kwargs):
if not self.avatar.name:
setattr(self, 'avatar.name', self.avatar.field.default)
super().save(*args, **kwargs) # Call the "real" save() method.
我是 Django 和 Django Rest Framework 的新手。请帮助我,我几天前就遇到了这个问题。你能帮我解决问题吗?
【问题讨论】:
标签: django django-models