Django初始化期间Django迁移失败

流浪者4865

设置

几个月前,我将应用程序从Django 1.6升级到了1.7,然后又从1.8升级了,现在我正致力于将1.9升级。

在解决迁移问题时,我发现了一个非常讨厌的数据库状态依赖实例-一种自定义用户模型调用(不是那么好)的管理方法django.contrib.auth.models.Groupkes。因此,当我建立持续集成管道时,我设法通过数据迁移解决了问题,并且一切都很好。

迁移如下所示:

# import statements left out for brevity

def seed_groups(apps, schema_editor):
    Group = apps.get_model('auth', 'Group')
    Group.objects.get_or_create(name='group1')
    Group.objects.get_or_create(name='group2')
    Group.objects.get_or_create(name='group3')

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

好的,那不是完全好-get_or_create此处的用法使我们能够连接一个已经有数据的数据库,而不会令Postgres对要求它插入已经拥有的行感到不安。不过这可以正常工作,我们一直很高兴露营者愉快地进行测试,而且我们的环境都没有任何问题。

扭曲

因此,我一直在运行测试并修复过时的问题,更新库,等等等等。因此,令人惊讶的是,仅在Django版本从1.8更改为1.9时,我的CI环境(一种中等受欢迎的服务)未能在迁移步骤中构建。

我检查了是否存在某种形式的缓存依赖关系链问题(我们正在加载所有正确的库),但是错误的回溯是非常熟悉的...。

django.db.utils.ProgrammingError: relation "auth_group" does not exist
LINE 1: ...ELECT "auth_group"."id", "auth_group"."name" FROM "auth_grou...
^

完整的追溯在这里可用:https : //gist.github.com/alexkahn/b63c41904809cbe53962dc104e4067f0

这个错误正在从运行中冒出来 python manage.py migrate --no-input

我为解决该问题而徒劳地做的事情:

修改seed_groups函数,如下所示:

def seed_groups(apps, schema_editor):
    # same
    db_alias = schema_editor.connection.alias
    Group.objects.using(db_alias).get_or_create(name='group1')
    # etc...

initial = True为我的该应用程序的0001迁移添加类属性。

将所有迁移压缩为一个。

将我已安装的应用程序列表直接指向此应用程序的AppConfig子类。

我不知道我在想些什么。

底线

有人知道为什么这会突然改变吗?有什么超级明显的事情让我想得太过分了吗?

流浪者4865

因此,这从...中消除了一些新的麻烦……用Django做事情的绝妙方法。

因此,我们在这里有一个模型经理:

class UserManager(BaseUserManager):
    def users_in_group1(self):
        return Group.objects.get(name='group1').user_set.filter()

它返回一个与auth.models.Group模型直接交互的查询集。此处模型之间的紧密耦合导致Django需要在创建任何表之前解决该关系。

一个简单的更改为:

def users_in_group1(self):
    return self.filter(groups__name='group1')

允许迁移无问题地运行。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Django中初始化GeopositionField

来自分类Dev

了解Django表单初始化

来自分类Dev

在Django CMS中初始化MultipleChoiceField

来自分类Dev

Django - 表单初始化如何工作?

来自分类Dev

如何在每次DbContext初始化期间禁用迁移验证

来自分类Dev

在Heroku上初始化期间出现“目录迁移已存在”

来自分类Dev

在Django迁移期间处理数据?

来自分类Dev

FirebaseApp初始化失败

来自分类Dev

变量初始化失败

来自分类Dev

初始化ComboBox失败

来自分类Dev

结构初始化失败

来自分类Dev

初始化SSLContext失败

来自分类Dev

FirebaseApp初始化失败

来自分类Dev

初始化c3p0池期间,采集尝试失败

来自分类Dev

在将Spring / Hibernate应用程序部署到glassfish SessionFactoy初始化期间失败NullPointerException

来自分类Dev

对象初始化期间发生NullReferenceException

来自分类Dev

显式声明期间的初始化

来自分类Dev

赋值与初始化期间的类型安全

来自分类Dev

Tomcat 初始化期间的 Java NumberFormatException

来自分类Dev

迁移之前的Flyway Maven初始化

来自分类Dev

领域迁移,在哪里初始化

来自分类Dev

Django站点的初始数据库迁移期间出现奇怪的错误

来自分类Dev

从初始开始迁移后的Django South迁移

来自分类Dev

使用docker-compose初始化Django应用

来自分类Dev

在每个Django测试之前初始化MEDIA_ROOT

来自分类Dev

Django Forms.py初始化错误?

来自分类Dev

从Django中的url参数初始化表单输入字段

来自分类Dev

使用Kwargs的Django表单初始化密钥错误

来自分类Dev

使用docker-compose初始化Django应用