gpt4 book ai didi

mysql - Django 1.8 迁移、自定义用户模型和 Postgres/MySQL 的奇怪问题

转载 作者:行者123 更新时间:2023-11-29 06:24:31 24 4
gpt4 key购买 nike

长话短说,Django 迁移和用户模型发生了一些我不理解的事情。关于与客户用户身份验证模型和迁移的外键关系的一些问题很无聊。

我使用 SQLite 和自定义用户对象在本地开发了应用程序:class Client(AbstractBaseUser, PermissionsMixin)在我的 settings.py 中,我有:

AUTH_USER_MODEL = "offerdrive.Client"

一切都与 SQLite 和本地/开发一起工作,此时该应用程序具有合理的功能集。

当进入生产环境时,我尝试了 Postgres,但失败了。然后我在 RDS 上尝试了 MySQL,它以同样的方式失败了。这是 ./manage.py migrate 之后的 MySql 错误:

django.db.utils.IntegrityError: (1215, '无法添加外键约束')

这是一些好奇的 InnoDB 调试信息(来自 mysql> show engine innodb status\G)-

------------------------
LATEST FOREIGN KEY ERROR
------------------------
2015-08-05 22:01:36 2af53b3cf700 Error in foreign key constraint of table test_drivedb/#sql-a69_248:
FOREIGN KEY (`user_id`) REFERENCES `offerdrive_client` (`id`):
Cannot resolve table name close to:
(`id`)

我以“老式”方式“扁平化”了所有迁移以确保 - rm -rf'ed migrations 目录,并重做 进行迁移

一些我已经阅读和尝试过的东西未能完全解决问题:

[1] Django 1.8 RC1: ProgrammingError when creating database tables .

[2] https://code.djangoproject.com/ticket/24524

不幸的是,测试仍然以同样的方式失败——即使正常/prod 数据库被正确迁移,并且迁移工作一致,测试数据库也会因相同的外键问题而失败。

如果我注意迁移的顺序,我可以让实际的数据库正常工作:

./manage.py reset_db
./manage.py migrate auth
./manage.py offerdrive
./manage migrate

但是,这似乎不适用于测试 - 似乎运行 ./manage.py test offerdrive 不会以任何方式强制执行该命令。它以同样的方式失败 - 提示相同的外键关系。

对于像 Django 这样的框架来说,这似乎是一个绝对愚蠢的问题,我认为我正在做一些非常愚蠢的事情。该应用程序本身不会做任何奇怪或疯狂的事情。我仍然感到困惑,为什么它在 SQLite 上运行良好,但在 Postgres 或 MySQL 上运行不佳。我最好的猜测是 SQLite 在某种程度上对外键约束不那么严格,即使表是乱序创建的,它们最终也会自行解决。那个,或者别的什么。可能吧。

tl;dr 计算机很难

有什么想法吗?

更新 - 显然连续两次运行 migrate 将适用于“真实”数据库 - 但这对失败的测试没有帮助。

最佳答案

嘿,小伙子。因此,经过一些努力、与其他人的一些通信以及一点运气,最好的解决方案原来很简单——我需要 pip install --upgrade django-registration-redux

1) 转折点是(我不敢相信我没有早点想到这一点)在 ./manage.py migrate -v3 上启用额外的详细信息并查看它的确切位置失败(之前,我尝试通过实际的 django 迁移加载/执行代码删除调试器,结果是错误的抽象级别来查看它)

2) 查看详细的迁移输出,很明显 registration_profile 表周围发生了爆炸。 (这是迁移失败之前运行的最后一件事)。

3) 我在应用程序对应的包 (django-registration/django-registration-redux) 周围挖掘......aaaand,看起来没有迁移。这是一个问题,因为 请注意,但是,由于没有迁移的本质,未迁移的应用程序不能依赖于已迁移的应用程序。 根据“”https://docs.djangoproject.com/en/1.8/topics/migrations/#dependencies

4) 一时兴起,在尝试将我自己的迁移添加到模块之前,我用 pip 升级了 django-registration-reduxdjango-registration安装--升级

Aaa,它修复了它。万岁#engineering!

我想指出这与自定义用户模块无关,只是一个我什至不知道的过时依赖项正在进入画面。

关于mysql - Django 1.8 迁移、自定义用户模型和 Postgres/MySQL 的奇怪问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31844053/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com