当前位置: 首页 > 知识库问答 >
问题:

Django自定义用户-不使用username-username唯一约束失败

戴建义
2023-03-14
from django.contrib.auth.models import AbstractUser, BaseUserManager


class MyUserManager(BaseUserManager):
    def create_user(self, mob_phone, email, password=None):
        """
        Creates and saves a User with the given mobile number and password.
        """
        if not mob_phone:
            raise ValueError('Users must mobile phone number')

        user = self.model(
            mob_phone=mob_phone,
            email=email
        )

        user.set_password(password)
        user.save(using=self._db)
        return user

    def create_superuser(self, mob_phone, email, password):
        """
        Creates and saves a superuser with the given email, date of
        birth and password.
        """
        user = self.create_user(
            mob_phone=mob_phone,
            email=email,
            password=password
        )
        user.is_admin = True
        user.save(using=self._db)
        return user


class CustomUser(AbstractUser):
    mob_phone = models.CharField(blank=False, max_length=10, unique=True)
    is_admin = models.BooleanField(default=False)
    objects = MyUserManager()

    # override username field as indentifier field
    USERNAME_FIELD = 'mob_phone'
    EMAIL_FIELD = 'email'

    def get_full_name(self):
        return self.mob_phone

    def get_short_name(self):
        return self.mob_phone

    def __str__(self):              # __unicode__ on Python 2
        return self.mob_phone

    def has_perm(self, perm, obj=None):
        "Does the user have a specific permission?"
        # Simplest possible answer: Yes, always
        return True

    def has_module_perms(self, app_label):
        "Does the user have permissions to view the app `app_label`?"
        # Simplest possible answer: Yes, always
        return True

    @property
    def is_staff(self):
        "Is the user a member of staff?"
        # Simplest possible answer: All admins are staff
        return self.is_admin

StackTrace:

追踪(最近的调用是最后一次):文件“manage.py”,第22行,在execute_from_command_line(sys.argv)文件“/home/dean/.local/lib/python3.5/site-packages/django/core/management/init.py”中,第363行,在execute_from_command_line utility.execute()文件“/home/dean/.local/lib/python3.5/site-packages/django/core/management/init.py”中,django/core/management/base.py“,第283行,在run_from_argv self.execute(*args,**cmd_options)文件”/home/dean/.local/lib/python3.5/site-packages/django/contrib/auth/management/commands/create/creates/createsuperuser.py“中,第63行,在execute return super(Command,self)中,在execute return super(Command,self)中,在-packages/django/contrib/auth/management/commands/createsuperuser.py”,line 183,在句柄self.usermodel._default_manager.db_manager(database).create_superuser(**user_data)文件“/home/dean/development/urbanfox/urbanfox/user_account/models.py”中,第43行,在create_superuser password=password文件“/home/dean/development/urbanfox/urbanfox/user_account/models.py”中,在create_superuser GS,**Kwargs)文件“/home/dean/.local/lib/python3.5/site-packages/django/db/models/base.py”,第807行,在save force_update=force_update,update_fields=update_fields中)文件“/home_dean/.local/lib/python3.5/site-packages/django/db/models/base.py”,第837行,在save_base updated/base.py“,第923行,在_save_table result=self._do_insert(cls._base_manager,using,fields)中,update_pk,raw)文件“/home/dean/.local/lib/python3.5/site-packages/django/db/models/base.py”,第962行,在_do_insert using=using,raw=raw)文件“/home/dean/.local/lib/python3.5/site-packages/django/db/models/manager.py”,第85行,在manager_method返回getattr(self.get_queryset(),name),(*args,返回query.get_compiler(using=using).execute_sql(return_id)文件“/home/dean/.local/lib/python3.5/site-packages/django/db/models/sql/compiler.py”,第1107行,在execute_sql cursor.execute(sql,params)文件“/home/dean/.local/lib/python3.5/site-packages/django/db/models/sql/compiler.py”,第80行,在execute第65行,在execute return self.cursor.execute(sql,params)文件“/home/dean/.local/lib/python3.5/site-packages/django/db/utils.py”中,第94行在exit six.reraise(dj_exc_type,dj_exc_value,traceback)文件“/home/dean/.local/lib/python3.5/site-packages/django/utils/six.py”中,第685行;在reraise文件“/home/dean/.local/bit-packages/django/backends/sqlite3/base.py”中,第685行;在reraise文件“在execute return database.cursor.execute(self,query,params)django.db.utils.integrityError:唯一约束失败:user_account_customuser.username

共有1个答案

苏涛
2023-03-14

好吧,我是个白痴。在发布这篇文章几秒钟后,我想到了一个明显的解决方案:

    username = models.CharField(max_length=40, unique=False, default='')

只需重写username字段并使其非唯一即可。

大黄鸭理论在行动....

 类似资料:
  • 问题内容: 默认情况下,登录后django将用户重定向到帐户/个人资料页面,或者,如果你编辑LOGIN_REDIRECT_URL,则可以将用户重定向到你在settings.py中指定的另一页面。 很棒,但是我希望用户(登录后)被重定向到自定义页面,该页面的链接看起来像这样:。因此,在这种情况下,默认帐户/配置文件或设置将不起作用,因为两者都是静态的。就我而言,地址部分针对每个用户而变化。 任何想法

  • 我试图创建自定义注释来检查唯一的字段值。例如,检查唯一的电子邮件地址等。 但无法自动关联“customerDAO”对象。它抛出异常组织。springframework。网状物util。NestedServletException:请求处理失败;嵌套的异常是javax。验证。ValidationException:isValid调用期间发生意外异常。 我在哪里犯错?请建议。 顾客JAVA 唯一的JA

  • 本文向大家介绍Django 使用`email`作为用户名并摆脱`username`字段,包括了Django 使用`email`作为用户名并摆脱`username`字段的使用技巧和注意事项,需要的朋友参考一下 示例 如果您想摆脱该username字段并email用作唯一的用户标识符,则必须创建一个User扩展自定义模型,AbstractBaseUser而不是AbstractUser。确实,usern

  • 问题内容: 我正在使用Django从Tango中学习Django,但是在输入时,我始终收到此错误: 这是输出: Models.py: 问题答案: 造成这种限制的原因可能是,在你最初迁移它时,在类中没有任何字段被调用(第一次迁移),并且在模型中添加了该字段之后,当你运行时,你已将默认值设置为静态值值(即或”等),并且打破了类别表的表段列的唯一约束,其中表段应该是唯一的,但这不是因为所有条目都将获得该

  • 警告:mysqli::mysqli():(HY000/1045):拒绝访问/home/domainname/public_html/autopublish/test.php中的用户'usernam'@'localhost'(使用密码:YES)。第8行连接失败:拒绝访问用户'usernam'@'localhost'(使用密码:YES)

  • 我使用LOAD CSV导入大量的节点和关系集合。我使用MERGE来获取或创建节点。为了提高性能,我还为node属性创建了一个唯一的索引。 问题是进口约1MIO。边缘表现非常糟糕。我分析了导入查询和单个合并查询,但我看不到唯一索引的任何用法。相反,匹配查询使用索引。如何将合并与索引一起使用?