Задать вопрос
@ArsLonga

Как лучше всего отследить изменения полей модели через форму?

Здравствуйте. Имеется модель пользователя MyUser. В форме UserInf меняю даю возможность пользователю изменить от 0 до всех полей формы и, соответственно, модели. Как отслеживать, какие поля изменены, и не перезаписывать не измененные поля на дефолтные пустые строки?
На данный момент есть следующая view:
def profile_change(request):
    if request.method == 'GET':
        current_inf = MyUser.objects.get(id = request.user.id)
        form = UserInf()
        return render(request, 'profile_change.html', context={'edit_form':form,
        'user':current_inf})
    elif request.method == 'POST':
        form = UserInf(request.POST)
        if form.is_valid():
            current_password = request.user.password
            form_cleaned = form.cleaned_data
            if check_password(form_cleaned['old_password'],current_password):
                if form_cleaned['password'] == form_cleaned['password2']:
                    user = form.save(commit=False)
                    user.password = form_cleaned['password']
                    user.id = request.user.id
                    user.user = request.user
                    user.save()
                    id = request.user.id
                else:
                    pass
            else:
                pass
            user = MyUser.objects.get(id=request.user.id)
            # как отследить, какие поля формы заполнены?
            return HttpResponseRedirect(reverse('profile', kwargs={'id':id}))
        else:
            pass

И сама форма:
class UserInf(forms.ModelForm):
    old_password = forms.CharField(widget=forms.PasswordInput, label="Старый пароль", required=False)
    password = forms.CharField(widget=forms.PasswordInput, label="Введите пароль", required=False)
    password2 = forms.CharField(widget=forms.PasswordInput, label="Подтвердите пароль",required=False)

    class Meta:
        model = MyUser
        fields = ('photo','firstname','surname','patronym','country')
        labels = {'firstname':'Имя','surname':'Фамилия',
        'patronym':'Отчество','country':'Страна'}
  • Вопрос задан
  • 77 просмотров
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы