为什么在 Django 中更新对象模型不能按预期工作?

问题描述 投票:0回答:1

这看起来很奇怪

我在 Django 中有以下模型:

class CustomUser(AbstractUser):
    first_name = models.CharField(_("first name"), max_length=20)
    last_name = models.CharField(_("last name"), max_length=20)
    email = models.EmailField(_('email address'), blank=False, unique=True)
    validated_account = models.BooleanField(_('validated account'), blank=False, default=False)
    phone = PhoneNumberField(null=False, blank=False, unique=True)

    def __str__(self):
        return f"{self.first_name} {self.last_name}"

我有以下表格来编辑模型:

class CustomUserChangeForm(UserChangeForm):
    password = None
    
    class Meta(UserChangeForm.Meta):
        model = CustomUser
        fields = ["first_name", "last_name", "email", "phone", "username"]

这是我编辑模型的看法:

@user_passes_test(lambda u: u.is_authenticated, "users:login")
def edit_profile(request):
    if request.method == "POST":
        print(request.POST)
        form = CustomUserChangeForm(request.POST, instance=request.user)
        print(form)

        if form.is_valid():
            user = form.save()
            auth_login(request, user)

            messages.success(request, "Edition successful.")

            return redirect("dashboard:cases")

        messages.error(
            request, "Unsuccessful Edition. Invalid information.")
    else:
        form = CustomUserChangeForm(instance=request.user)
        

    return render(request=request, template_name="dashboard/edit_profile.html", context={"edit_profile_form": form})

这是视图调用的打印结果:

<QueryDict: {'csrfmiddlewaretoken': ['DbmuCTIOAXdP96Ozrcsf3YXSCxQ1lusywgLz4OLh5FAHrjas25inxqIt0kS9syaj'], 'first_name': ['Super'], 'last_name': ['User'], 'email': ['[email protected]'], 'phone': ['+0043328107a'], 'username': ['admin']}>
<tr>
    <th><label for="id_first_name">First name:</label></th>
    <td>
      <input type="text" name="first_name" value="Super" maxlength="20" required id="id_first_name">
    </td>
  </tr>
  <tr>
    <th><label for="id_last_name">Last name:</label></th>
    <td>
      <input type="text" name="last_name" value="User" maxlength="20" required id="id_last_name">
    </td>
  </tr>
  <tr>
    <th><label for="id_email">Email address:</label></th>
    <td>
      <input type="email" name="email" value="[email protected]" maxlength="254" required id="id_email">
    </td>
  </tr>
  <tr>
    <th><label for="id_phone">Phone:</label></th>
    <td>
      <input type="tel" name="phone" value="+0043328107" maxlength="128" required id="id_phone">
    </td>
  </tr>
  <tr>
    <th><label for="id_username">Username:</label></th>
    <td>
      <input type="text" name="username" value="admin" maxlength="150" autocapitalize="none" autocomplete="username" required id="id_username">
        <br>
        <span class="helptext">Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.</span>
    </td>
  </tr>

为什么生成的表单不包含电话号码的最后一个字母?在 POST 请求中,清晰地显示了一个末尾带有字母的电话号码。我希望它是无效的,但表格是有效的。

我做错了什么?谢谢你的帮助

django django-models django-views django-forms
1个回答
0
投票

您确定表格有效吗?根据您那里的查看代码,如果表单无效,它将再次显示表单。如果它是有效的,它将重定向您。

© www.soinside.com 2019 - 2024. All rights reserved.