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)