当前位置: 首页 > 面试题库 >

Django创建自定义UserCreationForm

东方辉
2023-03-14
问题内容

我在Django中启用了用户身份验证模块,但是当我使用UserCreationForm它时,它仅询问用户名和两个密码/密码确认字段。我还希望将电子邮件和全名字段全部设置为必填字段。

我已经做到了:

from django.contrib.auth.forms import UserCreationForm
from django import forms
from django.contrib.auth.models import User

class RegisterForm(UserCreationForm):
    email = forms.EmailField(label = "Email")
    fullname = forms.CharField(label = "Full name")

    class Meta:
        model = User
        fields = ("username", "fullname", "email", )

现在,该表单显示了新字段,但是没有将它们保存到数据库中。

我怎样才能解决这个问题?


问题答案:

fullname用户模型中没有调用此字段。

如果要使用原始模型存储名称,则必须将其分别存储为名字和姓氏。

编辑: 如果您只希望表单中的一个字段并且仍使用原始用户模型,请使用以下命令:

您可以执行以下操作:

from django.contrib.auth.forms import UserCreationForm
from django import forms
from django.contrib.auth.models import User

class RegisterForm(UserCreationForm):
    email = forms.EmailField(label = "Email")
    fullname = forms.CharField(label = "First name")

    class Meta:
        model = User
        fields = ("username", "fullname", "email", )

现在,您必须执行manji所说的并覆盖save方法,但是由于User模型没有全名字段,因此它应如下所示:

def save(self, commit=True):
        user = super(RegisterForm, self).save(commit=False)
        first_name, last_name = self.cleaned_data["fullname"].split()
        user.first_name = first_name
        user.last_name = last_name
        user.email = self.cleaned_data["email"]
        if commit:
            user.save()
        return user

注意: 您应该为全名字段添加一个干净的方法,该方法将确保输入的全名仅包含两个部分,名字和姓氏,并且具有有效的字符。

用户模型的参考源代码:

http://code.djangoproject.com/browser/django/trunk/django/contrib/auth/models.py#L201


 类似资料:
  • 问题内容: 完全按照此处找到的教程进行操作,我无法创建自定义500或404错误页面。如果我确实输入了错误的网址,则该页面会显示默认的错误页面。有什么我应该检查的内容,以防止显示自定义页面? 文件目录: 在mysite / settings.py中,我启用了以下功能: 在mysite / polls / urls.py中: 我可以发布任何其他必要的代码,但是如果我使用了错误的网址,应该如何更改以获得

  • 问题内容: 注释如何与Java一起使用?以及如何创建这样的自定义注释: 基本上,我需要保留的POJO在持久化时像这样进行序列化: 这样,实际的生成/持久对象是这样的: 任何想法如何实现这一点? 问题答案: 如果创建自定义注释,则必须使用此处的 API 示例进行处理。您可以参考如何声明注释。 这是Java中的示例注释声明的样子。 并被称为。 表示您想在运行时保留注释,并且可以在运行时访问它。 表示您

  • 我正在使用helm charts创建部署微服务,通过执行helm create创建包含部署、服务和入口的基本图表,但我没有其他配置,如水平pod自动缩放器、pod中断预算。

  • 我们不仅可以分配事件处理程序,还可以从 JavaScript 生成事件。 自定义事件可用于创建“图形组件”。例如,我们自己的基于 JavaScript 的菜单的根元素可能会触发 open(打开菜单),select(有一项被选中)等事件来告诉菜单发生了什么。另一个代码可能会监听事件,并观察菜单发生了什么。 我们不仅可以生成出于自身目的而创建的全新事件,还可以生成例如 click 和 mousedow

  • 默认情况下,Navicat Monitor 从受监控的实例收集一组预设的服务器指标。你可能想要添加自己的查询,以收集特定实例的一些自定义性能指标,并在指标值超过某些阈值和持续时间时接收有关自定义数据的警报。若要配置自定义指标,请前往“配置”->“自定义指标”。 创建自定义指标和警报 在自定义指标页面中,点击“+ 新建自定义指标”。 【步骤一】输入自定义指标的定义: 指标名 输入自定义指标的名。 描

  • 问题内容: 扩展Django的默认用户 如果你对Django的用户模型完全满意,并且只想添加一些其他配置文件信息,则可以简单地子类化并添加自定义配置文件字段。此类提供默认用户的完整实现,作为抽象模型。。我创建了一个新模型,如下所示: 这在admin中几乎像Django的standard一样显示。但是,admin中最重要的区别是不存在password-(re)set字段,而是显示了普通的CharFi