python - Django:如何检查用户是否修改了字段?
问题描述
我在models.py中有一个模型;像这样:
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
avatar = models.ImageField(upload_to='static/images/account/avatar', default='/static/images/default-avatar.png')
bio = models.CharField(max_length=300, blank=True, null=True)
def __str__(self):
return '@' + self.user.username
在views.py中,我想检查来自Profile模型的文件(我的意思是头像)是否在views.py中发生了变化:
def editProfile(request):
user = request.user.profile
form = AuthorForm(instance=user)
if request.method == 'POST':
if ...:
os.remove(request.user.profile.avatar.path)
form = AuthorForm(request.POST, request.FILES, instance=user)
if form.is_valid():
form.save()
return redirect('dashboard')
context = {'form': form}
return render(request, 'account/edit.html', context)
事实上,如果用户不更改头像字段,我希望不删除默认图像(或任何其他照片)。
解决方案
更改的字段列在.changed_data
属性 [Django-doc]中。因此,您可以检查头像是否已更改:
if 'avatar' in form.changed_data:
os.remove(request.user.profile.avatar.path)
推荐阅读
- python - 创建 XML 内联 xmlns
- java - POI - get.hyperlink() 未检索单元格的最新超链接
- pandas - pdDataFrame 从多列和多行数据中获取最早的时间
- html - 使用 flexbox 将按钮定位在它所在的 div 的右侧时遇到问题
- c++ - 当它们的容器被破坏时,如何删除这些动态分配的对象?
- excel - Excel VBA - 从可变长度字符串的左侧/右侧删除文本
- angular - Angular - Karma 单元测试不起作用,为什么?
- php - PHP fetch_assoc 循环
- haskell - 当 ghc 抱怨它不在范围内时,如何在 Haskell 中使用实例函数,尽管有导入?
- bash - 优化 grep -f 管道命令