gpt4 book ai didi

python - Django:具有唯一字段的 UpdateView

转载 作者:太空宇宙 更新时间:2023-11-04 03:50:15 25 4
gpt4 key购买 nike

我正在尝试为我的自定义用户模型创建一个更新配置文件页面。在我的模型中,我的电子邮件字段设置为唯一。

class User(UserBase):
...
email = models.EmailField(
max_length=100,
unique=True,
blank=True,
verbose_name='email address',
)

那么在我看来我有:

class UpdateProfileView(LoginRequiredMixin, UpdateView):
template_name = 'accounts/update-profile.html'
form_class = UpdateProfileForm
model = User

UpdateProfileForm 所做的唯一一件事就是在 clean 方法中检查旧密码是否与新密码不同。

我的问题是,当我保存表单时,我收到错误消息 User with this Email address already exists.。因为它是一个更新 View 并保存一个没有改变的唯一字段,它不应该抛出这个错误吗?如果这是正确的行为,那么我该如何保存表单并忽略电子邮件地址(如果它没有更改)。

提前感谢您的帮助。

最佳答案

从您的用户模型定义中删除 blank=True。默认情况下,字段定义为 null=False,另外您指定该字段必须是唯一的——这是一个重要的字段——所以您不希望您的表单验证允许空值。这是 Django documentation在那些属性上。 blank 完全是一个表单验证的东西。仅此一项就可以修复错误。

除非您有自定义表单逻辑/验证,否则您不需要 UpdateProfileView 上的 form_class 属性。来自docs :“这些通用 View 将自动创建一个 ModelForm”。 (甚至还有一个 UpdateView 示例)。

查看 View 是否在没有 form_class 的情况下工作,如果可以,则检查您的 UpdateProfileForm 代码。

关于python - Django:具有唯一字段的 UpdateView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21609985/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com