行囊电子商务 2023-07-18 17:19 采纳率: 78.1%
浏览 7
已结题

django mysql 为什么自定义的用户模型无法通过python src/manage.py migrate自动创建数据库,但是系统自带的可以自动创建?

django mysql 为什么自定义的用户模型无法通过python src/manage.py migrate自动创建数据库,但是系统自带的可以自动创建?

  • 写回答

2条回答 默认 最新

  • Leodong. 2023-07-18 17:26
    关注

    该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
    在Django中,如果你自定义了用户模型,需要注意一些特殊的步骤,以确保它可以被正确地创建和迁移。以下是可能导致你的自定义用户模型无法自动创建数据库的一些常见原因:

    1、 没有正确配置AUTH_USER_MODEL

    在自定义用户模型时,你需要在settings.py中设置AUTH_USER_MODEL,以告诉Django使用哪个模型作为用户模型。确保你已经正确设置了AUTH_USER_MODEL。例如:

    AUTH_USER_MODEL = 'myapp.MyUserModel'
    

    其中myapp是你的应用名称,MyUserModel是你自定义的用户模型。

    2、 迁移顺序不正确

    如果你的应用中有其他模型依赖于用户模型,那么你需要确保在创建用户模型之前先创建这些依赖模型。在Django中,可以使用"dependencies"属性来指定迁移顺序。例如:

    class Migration(migrations.Migration):
    
        dependencies = [
            ('myapp', '0001_initial'),
            ('auth', '0001_initial'),
        ]
    

    这里,我们指定先创建auth应用中的初始迁移,再创建myapp应用中的初始迁移。这样,auth应用中的用户模型就可以被正确地创建了。

    3、 没有正确继承AbstractBaseUser和BaseUserManager

    如果你自定义了用户模型,需要确保它正确地继承了AbstractBaseUser和BaseUserManager。这两个类提供了一些必要的功能,例如密码哈希和用户验证。确保你的自定义用户模型定义正确,并正确继承这两个类。

    4、 数据库表已经存在

    如果你曾经手动创建过用户表,那么Django的迁移工具就无法自动创建这个表了。在这种情况下,你可以手动删除这个表,或者使用Django的"migrate --fake-initial"命令来跳过初始迁移。例如:

    python src/manage.py migrate --fake-initial
    

    这个命令会跳过初始迁移,并将数据库标记为已迁移,以便你可以继续使用迁移工具来管理模型。

    总之,自定义用户模型需要遵循一些特定的规则,以确保它可以被正确地创建和迁移。如果你的自定义用户模型无法自动创建数据库,请检查上述常见原因,以找到问题的根源。


    如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 8月16日
  • 已采纳回答 8月8日
  • 创建了问题 7月18日

悬赏问题

  • ¥15 Opencv(C++)异常
  • ¥15 VScode上配置C语言环境
  • ¥15 汇编语言没有主程序吗?
  • ¥15 这个函数为什么会爆内存
  • ¥15 无法装系统,grub成了顽固拦路虎
  • ¥15 springboot aop 应用启动异常
  • ¥15 matlab有关债券凸性久期的代码
  • ¥15 lvgl v8.2定时器提前到来
  • ¥15 qtcp 发送数据时偶尔会遇到发送数据失败?用的MSVC编译器(标签-qt|关键词-tcp)
  • ¥15 cam_lidar_calibration报错