使用相同的电子邮件地址更新用户,给出电子邮件已存在的错误

updating user with same email address, gives email already exists error

我正在尝试更新用户字段,但是当我尝试使用相同的电子邮件地址更新它时出现 returns email already exists 错误。

@login_required
def user_profile(request, id):
  if request.user.id == int(id):
    if request.method == "POST":
      user = Account.objects.get(pk=request.user.pk)
      form = UserProfileUpdateForm(request.POST, user=user)

      if form.is_valid():
        form.save()
        messages.success(request, mark_safe("UPDATE: <br> your profile is updated"))

        context = {
          "form": form
        }

        return render(request, "accounts/user_profile.html", context)

      else:
       #...
    else:
      #...
  else:
    return redirect("not_found")

和forms.py

class UserProfileUpdateForm(forms.ModelForm):

  class Meta:
    model = Account
    fields = ["first_name", "last_name", "first_name_kana", "last_name_kana",
              "post_code", "city", "address", "building",
              "tel", "sex", "occupation",
              "year", "month", "day",
              "parent_name", "parent_name_kana",
              "year", "month", "day",
              "school_type",
              "school_name", "student_id",
              "email"]

  def __init__(self, *args, **kwargs):
    now = datetime.datetime.now()
    user = kwargs.pop("user")

    super(UserProfileUpdateForm, self).__init__(*args, **kwargs)

    # widget settings
   

用相同的电子邮件地址更新用户字段的正确方法是什么。

您可以在更新用户时从查询集中排除当前用户。

class UserProfileUpdateForm(forms.ModelForm):

  class Meta:
    model = Account
    fields = [....]

  def clean_email(self):
      email = self.cleaned_data.get("email")
      if Account.objects.filter(email=email).exclude(pk=self.instance.pk).exists():
          raise forms.ValidationError("Email Already Exists")
      return email