向Django管理员身份验证表单添加自定义字段

向Django管理员身份验证表单添加自定义字段,django,django-forms,django-views,django-admin,Django,Django Forms,Django Views,Django Admin,我正在构建一个应用程序,其中auth进程有三个字段 子域 用户名 密码 每个子域定义一个独立的空间,用户名仅在其子域内是唯一的 例如: 子域foo.bar.com拥有用户jhon_doe和密码secret。它可能存在另一个jhon_doe,但在其他子域中 所以。。。我已经创建了一个自定义的后端身份验证,它工作得很好。问题是登录Django管理表单默认有用户名和密码字段 我想用子域用户名和密码字段实现一个自定义Django管理员登录表单。我有一个类似的要求,我用以下方式实现了这一点。看看它是否

我正在构建一个应用程序,其中auth进程有三个字段

  • 子域
  • 用户名
  • 密码
  • 每个子域定义一个独立的空间,用户名仅在其子域内是唯一的

    例如:

    • 子域
      foo.bar.com
      拥有用户
      jhon_doe
      和密码
      secret
      。它可能存在另一个
      jhon_doe
      ,但在其他子域中
    所以。。。我已经创建了一个自定义的后端身份验证,它工作得很好。问题是登录Django管理表单默认有
    用户名
    密码
    字段


    我想用
    子域
    用户名和
    密码
    字段实现一个自定义Django管理员登录表单。

    我有一个类似的要求,我用以下方式实现了这一点。看看它是否能帮助你

    首先,我扩展了现有的用户模型,并在models.py中添加了电子邮件和电话

    from django.db import models
    from django.contrib.auth.models import AbstractUser
    
    
    class User(AbstractUser):
       email = models.EmailField(verbose_name='email',
                              max_length=255, unique=True)
       phone = models.CharField(null=True, max_length=255)
       REQUIRED_FIELDS = ['username', 'first_name', 'last_name']
       USERNAME_FIELD = 'email'
    
       def get_username(self):
           return self.email
    
    我已经创建了一个
    authapp
    ,并在我在authapp文件夹中创建的
    form.py
    中添加了以下几行

    from django.views.generic import CreateView
    from django.forms import CharField,  ModelForm
    from django.utils.translation import gettext_lazy as _
    from authapp.models import User
    
    class LoginForm(ModelForm):
    class Meta:
        model = User
        fields = ('email', 'phone', 'password')
    
    最后,我在模板中的.html文件中添加了此代码。请求负载中的表单名称是
    login\u Form

    <form method="POST" action="/login/">
        <div class="modal-body">{% csrf_token %} {{ login_form|crispy}}</div>
        <div class="modal-footer">
          <button type="button" class="btn btn-secondary" data-dismiss="modal">
            Close
          </button>
          <button type="submit" class="btn btn-primary">Login</button>
        </div>
      </form>
    
    
    {%csrf_token%}{{login_form|crispy}}
    接近
    登录
    
    我登录表单的结果是

    我想在此澄清一下,如果你想改变Django默认的现有登录屏幕,那么你必须搜索arround,但我建议你应该实现自己的定制方式


    谢谢您,祝您编码愉快……

    您好。请提供forms.py中的注册类。我需要添加其他字段,但不知道如何添加。谢谢您好,您在哪里注册了登录表单?登录表单是上下文中LoginForm()的对象@nassim@DmytroManzhula类RegisterForm(ModelForm):password=CharField(widget=PasswordInput())类Meta:model=User字段=(“电子邮件”、“电话”、“密码”)