运行manage.py测试时Django数据迁移失败,但运行manage.py migration时失败

雷·布雷内基(Leigh Brenecki)

我有一个Django 1.7迁移,看起来像这样:

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models, migrations

def units_to_m2m(apps, schema_editor):
    Interval = apps.get_model("myapp", "Interval")
    IntervalUnit = apps.get_model("myapp", "IntervalUnit")

    for interval in Interval.objects.all():
        IntervalUnit(
            interval=interval,
            unit=interval.unit,
            base_date=interval.base_date
        ).save()

class Migration(migrations.Migration):

    dependencies = [
        ('otherapp', '0007_auto_20150310_1400'),
        ('myapp', '0009_auto_20150316_1608'),
    ]

    operations = [
        migrations.CreateModel(
            name='IntervalUnit',
            # ...
        ),
        # ...
        migrations.AddField(
            model_name='interval',
            name='units',
            field=models.ManyToManyField(to='otherapp.Unit', through='myapp.IntervalUnit'),
            preserve_default=True,
        ),
        migrations.RunPython(units_to_m2m),
        migrations.RemoveField(
            model_name='interval',
            name='unit',
        ),
        migrations.RemoveField(
            model_name='interval',
            name='base_date',
        ),
    ]

当我运行时manage.py migrate,它可以正常迁移。manage.py test但是,当我运行时,它将尝试创建测试数据库,然后在此迁移过程中失败,并显示以下错误:

Traceback (most recent call last):
...
  File "/home/adam/myproject/myapp/migrations/0010_auto_20150317_1516.py", line 10, in units_to_m2m
    for interval in Interval.objects.all():
...
django.db.utils.OperationalError: (1054, "Unknown column 'myapp_interval.base_date' in 'field list'")

之后,当我连接到测试数据库时(不会删除它),即使迁移过程中途崩溃,数据库结构也将按照您的期望运行。这里发生了什么?

编辑:我已经尝试将迁移分为三个单独的迁移,一个迁移包含一个迁移之前的所有内容RunPython,一个包含RunPython其自身的内容,另一个包含之后的所有内容;它仍然在做完全相同的事情。

雷·布雷内基(Leigh Brenecki)

事实证明,迁移已按照预期的顺序成功运行,但是我有两个数据库,并且在两个平台上都运行了我的迁移,而无需咨询数据库路由器。跟踪此问题的Django票证是#23273,该票证仍然开放。

大概是,RunPython迁移是针对default(已经迁移的)查询而不是针对迁移实际上应该在其上运行的数据库的查询

就我而言,我们不再需要将第二个数据库用于任何事情,因此我们可以将其settings.DATABASES完全删除

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用MySQL数据库运行“ python manage.py migration”时遇到SQL错误

使用manage.py运行时ThreadPoolExecutor失败

在Django中运行python manage.py test时如何强制使用新数据库?

运行manage.py时如何解决这些错误

运行“ python manage.py check”时出现错误

运行python manage.py shell时出错

运行 manage.py runserver 时 Python.exe 崩溃

在运行python manage.py runserver时遇到麻烦

python无法打开文件“ manage.py”-“ heroku运行python manage.py migration命令输入”

找不到django.core.management,但在运行manage.py时django存在

如何使docker build运行python manage.py migration

运行Django manage.py时出现错误“文件不存在”

运行python manage.py时出现语法错误-Django

Django-关系“关系”不存在。无法运行python manage.py migration?

当我运行python manage.py makemigrations时出现此错误

“即使设置了我的static_root,运行'$ python manage.py collectstatic --noinput时也会出错”

将模型导入到manage.py运行的文件中时,“尚未加载应用”

使用 manage.py 运行服务器时收到错误

运行“sudo python3 manage.py migrate”时的回溯

当我运行 python3 manage.py runserver 时,Pycharm 在终端中显示错误

当我们运行 Python manage.py runserver 时到底发生了什么

从Django 1.6升级到1.9:python manage.py迁移失败

heroku如何运行python manage.py迁移?

在Heroku部署过程中运行./manage.py迁移

Django:manage.py工作正常,但django-admin失败

当我运行./manage.py运行服务器时,出现错误ImportError:没有名为celery的模块

通过主管运行./manage.py

无法在代码船上运行manage.py

通过Gunicorn运行manage.py命令