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 я хочу проверить, изменился ли файл (я имею в виду avatar) из модели 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)
Вернуться на верх