Python Django:UpdateView具有唯一字段
我正在尝试为我的自定义用户模型创建更新配置文件页面。在我的模型中,我的电子邮件字段设置为唯一Python Django:UpdateView具有唯一字段,python,django,Python,Django,我正在尝试为我的自定义用户模型创建更新配置文件页面。在我的模型中,我的电子邮件字段设置为唯一 class User(UserBase): ... email = models.EmailField( max_length=100, unique=True, blank=True, verbose_name='email address', ) 在我看来,我有: c
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
方法中检查旧密码与新密码是否不同
我的问题是,当我保存表单时,收到的错误消息是带有此电子邮件地址的用户已存在。。既然它是一个更新视图,并且保存了一个唯一的字段,但没有更改,那么它不应该抛出这个错误吗?如果这是正确的行为,那么如何保存表单并忽略电子邮件地址(如果没有更改)
提前感谢您的帮助。以下是一些建议/备选方案:
class Form(forms.Form):
...
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['unique_field].required = False
class Form(forms.Form):
...
def clean_unique_id(self):
"""
Take new value or if its '' e.g. None take initial value
"""
return self.data['unique_id'] or self.initial['unique_id']
从用户模型定义中删除
blank=True
。默认情况下,字段定义为null=False
,此外,您还指定该字段必须唯一。这是一个重要字段,因此您不希望表单验证允许空白值。下面是关于这些属性的Django<代码>空白完全是表单验证。仅此一点就可以修复错误
除非您有自定义表单逻辑/验证,否则在UpdateProfileView
上不需要form\u类
属性。来自:“这些通用视图将自动创建模型表单”。(甚至还有一个UpdateView示例)
查看视图在没有
form\u类的情况下是否有效,如果有效,然后检查您的UpdateProfileForm
代码。我正在服用疯狂药丸吗,这不是一个问题还是一个愚蠢的问题?没有人对此有任何反馈?为什么不给我们看一下UpdateProfileForm
,这样我们就可以得到更好的想法。直接从表单。save
:“ModelForm的子类可以接受现有的模型实例作为关键字参数实例;如果提供了它,save()将更新该实例。如果未提供该实例,则save()将创建指定模型的新实例。“是否使用实例
参数?在注释掉表单类
时是否有效?”?