首页 > 解决方案 > 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)

事实上,如果用户不更改头像字段,我希望不删除默认图像(或任何其他照片)。

标签: pythondjango

解决方案


更改的字段列在.changed_data属性 [Django-doc]中。因此,您可以检查头像是否已更改:

if 'avatar' in form.changed_data:
    os.remove(request.user.profile.avatar.path)

推荐阅读