正如标题所说,我似乎无法让迁移工作.
该应用程序最初低于1.6,因此我了解迁移最初不会出现,事实上,如果我运行,python manage.py migrate
我得到:
Operations to perform:
Synchronize unmigrated apps: myapp
Apply all migrations: admin, contenttypes, auth, sessions
Synchronizing apps without migrations:
Creating tables...
Installing custom SQL...
Installing indexes...
Running migrations:
No migrations to apply.
Run Code Online (Sandbox Code Playgroud)
如果我对任何模型进行更改myapp
,它仍然会按预期显示未迁移.
但如果我跑,python manage.py makemigrations myapp
我得到:
No changes detected in app 'myapp'
Run Code Online (Sandbox Code Playgroud)
似乎没关系我运行命令的内容或方式,它从未检测到应用程序有更改,也没有将任何迁移文件添加到应用程序.
有没有办法迫使应用程序进行迁移,并基本上说"这是我的工作基础"或任何东西?或者我错过了什么?
我的数据库是一个PostgreSQL,如果它有帮助的话.
我用一些模型创建了一个新的应用程序,现在我注意到一些模型很难想到.由于我没有提交代码,明智的做法是将数据库迁移到最后的良好状态,并使用更好的模型重做迁移.在这种情况下,最后一个良好状态是新应用程序不存在的数据库.
如何从Django 1.7中的初始迁移中迁移回来?
在South
一个人可以做:
python manage.py migrate <app> zero
Run Code Online (Sandbox Code Playgroud)
这<app>
将从迁移历史中清除并删除所有表<app>
.
如何使用Django 1.7迁移?
南方已有类似的问题,但我已经开始使用Django 1.7进行我的项目,而不是使用South.
在开发过程中,已经创建了许多迁移,但是软件尚未完成,并且不存在必须迁移的数据库.因此,我想重置迁移,就像我当前的模型是原始模型并重新创建所有数据库一样.
建议的方法是什么?
编辑:从Django 1.8开始,有一个名为squashmigrations的新命令,它或多或少地解决了这里描述的问题.
我正在尝试将项目从Django 1.6升级到1.7.我收到以下错误:
[Thu Oct 09 14:16:41 2014] [error] [client 95.79.172.156] mod_wsgi (pid=14523): Exception occurred processing WSGI script '/home/users1/k/kisvadim/domains/mathtasks.org/django.wsgi'.
[Thu Oct 09 14:16:41 2014] [error] [client 95.79.172.156] Traceback (most recent call last):
[Thu Oct 09 14:16:41 2014] [error] [client 95.79.172.156] File "/home/users1/k/kisvadim/virtualenv/PythonEnv/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 187, in __call__
[Thu Oct 09 14:16:41 2014] [error] [client 95.79.172.156] response = self.get_response(request)
[Thu Oct 09 14:16:41 2014] [error] [client 95.79.172.156] File "/home/users1/k/kisvadim/virtualenv/PythonEnv/lib/python2.7/site-packages/django/core/handlers/base.py", line 199, in get_response
[Thu Oct 09 14:16:41 2014] [error] [client 95.79.172.156] response = …
Run Code Online (Sandbox Code Playgroud) 我正在尝试应用迁移,但我收到错误:
django.db.utils.OperationalError:(1050,"表'customers_customer'已经存在")
我通过发出以下命令得到这个:
python manage.py migrate
Run Code Online (Sandbox Code Playgroud)
我的客户表已经存在,那么我该如何让迁移知道这一点,而不是出错,并对我的模型进行修改?
我在本地环境中用本地数据库运行它没有问题.当我将数据库指向生产并在migrate
上面运行时,我得到了这个错误.
在升级到Django 1.7时,我收到以下错误消息 ./manage.py
$ ./manage.py
Traceback (most recent call last):
File "./manage.py", line 16, in <module>
execute_from_command_line(sys.argv)
File "/home/johnc/.virtualenvs/myproj-django1.7/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 427, in execute_from_command_line
utility.execute()
File "/home/johnc/.virtualenvs/myproj-django1.7/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 391, in execute
django.setup()
File "/home/johnc/.virtualenvs/myproj-django1.7/local/lib/python2.7/site-packages/django/__init__.py", line 21, in setup
apps.populate(settings.INSTALLED_APPS)
File "/home/johnc/.virtualenvs/myproj-django1.7/local/lib/python2.7/site-packages/django/apps/registry.py", line 89, in populate
"duplicates: %s" % app_config.label)
django.core.exceptions.ImproperlyConfigured: Application labels aren't unique, duplicates: foo
Run Code Online (Sandbox Code Playgroud)
有什么问题,如何解决?
我有一个Django应用程序,其部分最初是用Django 1.2编写的,并且该应用程序已经升级到1.7.升级到1.7后,我收到以下警告python manage.py check
:
System check identified some issues:
WARNINGS:
?: (1_6.W001) Some project unittests may not execute as expected.
HINT: Django 1.6 introduced a new default test runner. It looks like this project was generated using Django 1.5 or earlier. You should ensure your tests are all running & behaving as expected. See https://docs.djangoproject.com/en/dev/releases/1.6/#new-test-runner for more information.
Run Code Online (Sandbox Code Playgroud)
错误消息中提到的URL确实详细说明了已经发生的更改,但它没有提供有关为何触发此警告或如何禁止它的任何提示.尽管警告消息引用了Django 1.6,但它只在升级到Django 1.7后才开始出现
我已经检查过在Django 1.7下运行相同数量的单元测试,就像在Django 1.6.1下运行一样.
所以我现在正在快速迭代一个django应用程序,我不断调整models.py.在一两天的编程和测试过程中,我生成了几十个迁移文件.有时候我真的撕开了架构并完全重新做了.这会导致迁移过程对默认值和空值等抱怨很多.如果可能的话,我只想抓住所有迁移的东西并重新开始迁移,因为我终于知道我在做什么了.到目前为止,我的方法如下:
__init__.py
.DELETE FROM south_migrationhistory WHERE app_name='my_app';
./manage.py makemigrations my_app
- 这会0001_initial.py
在我的迁移文件夹中生成一个文件../manage migrate my_app
- 我希望这个命令重新构建我的所有表,但是它说:"没有要应用的迁移."是什么赋予了?
此外,south_migrationhistory
数据库表现在仍然在播放,我已经转向南并已切换到Django 1.7?
谢谢.
django database-migration django-south django-1.7 django-migrations
我有一个数据迁移,可以更新一些权限.我知道迁移中的权限存在一些已知问题,我可以通过自己的迁移(而不是使用模型中的元组快捷方式)创建权限来避免一些麻烦.
迁移:
from __future__ import unicode_literals
from django.db import migrations, models
from django.conf import settings
def create_feature_groups(apps, schema_editor):
app = models.get_app('myauth')
Group = apps.get_model("auth", "Group")
pro = Group.objects.create(name='pro')
Permission = apps.get_model("auth", "Permission")
ContentType = apps.get_model("contenttypes", "ContentType")
invitation_contenttype = ContentType.objects.get(name='Invitation')
send_invitation = Permission.objects.create(
codename='send_invitation',
name='Can send Invitation',
content_type=invitation_contenttype)
pro.permissions.add(receive_invitation)
class Migration(migrations.Migration):
dependencies = [
('myauth', '0002_initial_data'),
]
operations = [
migrations.RunPython(create_feature_groups),
]
Run Code Online (Sandbox Code Playgroud)
经过一些试验和错误,我能够使用这项工作,manage.py migrate
但我在测试中遇到错误manage.py test
.
__fake__.DoesNotExist: ContentType matching query does not exist.
Run Code Online (Sandbox Code Playgroud)
稍微调试发现,ContentType
在测试中运行时,迁移中此时没有(不确定原因).按照这篇文章中的建议,我尝试在自己的迁移中手动更新内容类型.添加 …
当我更改help_text
或verbose_name
运行任何模型字段并运行时python manage.py makemigrations
,它会检测到这些更改并创建新的迁移,例如0002_xxxx.py
.
我正在使用PostgreSQL,我认为这些更改与我的数据库无关(我想知道这些更改是否存在相关的DBMS).
为什么Django会为此类更改生成迁移?有没有选择忽略它们?
我可以手动安全地删除0002_xxxx.py
上次迁移(0001_initial.py
)的更改0002_xxxx.py
吗?
有没有办法自动更新以前的迁移?