【问题标题】:Django form creating new record instead of updatingDjango 表单创建新记录而不是更新
【发布时间】:2020-10-11 13:53:24
【问题描述】:

我正在我的应用中创建用户更新表单。但是每次提交表单时,它都会创建一个新记录,如果您再次尝试提交将返回完整性错误(重复的用户名,两者都为空)。

错误消息:django.db.utils.IntegrityError:唯一约束失败:auth_user.username

forms.py:

class UserChangeForm(forms.ModelForm):

    class Meta:
        model = User
        fields = ['email', 'first_name', 'last_name']

    def __init__(self, username, *args, **kwargs):
        super(UserChangeForm, self).__init__(*args, **kwargs)
        self.username = username

views.py:

def profile(request):

    user = request.user

    if request.method == 'POST':
        user_form = UserChangeForm(user, request.POST)

        if user_form.is_valid():
            user_form.save()
            messages.success(request, f'Your account has been updated!')

            return redirect('users:profile')

    else:
        email = request.user.email
        first_name = request.user.first_name
        last_name = request.user.last_name
        user_form = UserChangeForm(user, initial={
            'email': email,
            'first_name': first_name,
            'last_name': last_name
        })

    context = {
        'user_form': user_form,
    }

    return render(request, 'users/profile.html', context)

【问题讨论】:

    标签: django django-models django-forms django-views django-templates


    【解决方案1】:

    您需要在 if 条件和 else 中将用户作为实例传递,就像这样

    def profile(request):
        if request.method == 'POST':
            user_form = UserChangeForm(request.POST , instance = request.user)
    
            if user_form.is_valid():
                user_form.save()
                messages.success(request, f'Your account has been updated!')
    
                return redirect('users:profile')
    
        else:
            user_form = UserChangeForm(instance=request.user)
    
        context = {
            'user_form': user_form,
        }
        return render(request, 'users/profile.html', context)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-12
      • 2012-07-25
      • 2020-07-08
      • 2014-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-30
      相关资源
      最近更新 更多