标签: django-migrations

django 1.7 migrate获取错误"表已经存在"

我正在尝试应用迁移,但我收到错误:

django.db.utils.OperationalError:(1050,"表'customers_customer'已经存在")

我通过发出以下命令得到这个:

python manage.py migrate
Run Code Online (Sandbox Code Playgroud)

我的客户表已经存在,那么我该如何让迁移知道这一点,而不是出错,并对我的模型进行修改?

我在本地环境中用本地数据库运行它没有问题.当我将数据库指向生产并在migrate上面运行时,我得到了这个错误.

django django-south django-1.7 django-migrations

59
推荐指数
3
解决办法
7万
查看次数

Django 1.8运行特定的迁移

在django 1.8中,有一种方法可以运行特定的迁移和迁移.

不仅适用于一个应用程序,还适用于该应用程序迁移目录中的特定文件.

编辑原始:

    Traceback (most recent call last):
  File "manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/home/vagrant/virtualenvs/aku/lib/python3.4/site-packages/django/core/management/__init__.py", line 338, in execute_from_command_line
    utility.execute()
  File "/home/vagrant/virtualenvs/aku/lib/python3.4/site-packages/django/core/management/__init__.py", line 330, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/home/vagrant/virtualenvs/aku/lib/python3.4/site-packages/django/core/management/base.py", line 393, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/home/vagrant/virtualenvs/aku/lib/python3.4/site-packages/django/core/management/base.py", line 444, in execute
    output = self.handle(*args, **options)
  File "/home/vagrant/virtualenvs/aku/lib/python3.4/site-packages/django/core/management/commands/migrate.py", line 146, in handle
    plan = executor.migration_plan(targets)
  File "/home/vagrant/virtualenvs/aku/lib/python3.4/site-packages/django/db/migrations/executor.py", line 50, in migration_plan
    self.loader.graph.node_map[target].children
KeyError: ('wagtailcore', '0001_initial')
Run Code Online (Sandbox Code Playgroud)

做了一点搜索并找到了这个https://code.djangoproject.com/ticket/24225#no1

migration django django-migrations

48
推荐指数
1
解决办法
4万
查看次数

Django迁移RunPython无法调用模型方法

我正在使用该RunPython方法创建数据迁移.但是,当我尝试在对象上运行方法时,没有定义.是否可以使用RunPython?调用模型上定义的方法?

django django-models django-migrations

45
推荐指数
5
解决办法
1万
查看次数

如何在使用--fake后重做django 1.8上的迁移

我的迁移出了点问题,我在模型中添加了一个新的datetimefield然后我使用了makemigrations并进行迁移.

python manage.py makemigrations
python manage.py migrate
Run Code Online (Sandbox Code Playgroud)

但在此之后,迁移得到了"表已存在错误".我想我可以假装迁移并重新开始,所以我做到了

python manage.py makemigrations --fake core

Operations to perform:
  Apply all migrations: core
Running migrations:
  Rendering model states... DONE
  Applying core.0001_initial... FAKED
  Applying core.0002_auto_20150525_1331... FAKED
  Applying core.0003_auto_20150525_1348... FAKED
  Applying core.0004_processo_data_atualizacao... FAKED
Run Code Online (Sandbox Code Playgroud)

但是我刚刚创建的新迁移也是伪造的(当然!).

在执行此操作后,如何重做迁移(在本例中为core.0004)的正确方法?

django django-migrations django-1.8

43
推荐指数
1
解决办法
3万
查看次数

将字段更改为ManyToMany时的Django数据迁移

我有一个Django应用程序,我想在其中将ForeignKey中的字段更改为ManyToManyField.我想保留我的旧数据.最简单/最好的流程是什么?如果重要,我使用sqlite3作为我的数据库后端.

如果我对问题的总结不清楚,这是一个例子.说我有两个型号:

class Author(models.Model):  
    author = models.CharField(max_length=100) 

class Book(models.Model):  
    author = models.ForeignKey(Author)  
    title = models.CharField(max_length=100)
Run Code Online (Sandbox Code Playgroud)

假设我的数据库中有很多数据.现在,我想更改Book模型,如下所示:

class Book(models.Model):  
    author = models.ManyToManyField(Author)  
    title = models.CharField(max_length=100) 
Run Code Online (Sandbox Code Playgroud)

我不想"丢失"我之前的所有数据.

完成此任务的最佳/最简单方法是什么?

django django-models django-migrations

42
推荐指数
1
解决办法
1万
查看次数

Django Migrations添加默认为模型函数的字段

我在我的Django模型中添加了一个新的,不可为空的字段,并尝试使用迁移来部署该更改.如何将现有模型的默认值设置为这些模型的某些函数而不是常量?

举一个例子,假设我之前有一个created_on字段,我刚刚添加了一个updated_on字段,其值我想先设置为模型created_on.我如何在迁移中执行此操作?

这就是我想要开始的:

    migrations.AddField(
        model_name='series',
        name='updated_as',
        field=models.DateTimeField(default=????, auto_now=True),
        preserve_default=False,
    ),
Run Code Online (Sandbox Code Playgroud)

django django-models django-migrations

42
推荐指数
3
解决办法
2万
查看次数

django 1.7迁移 - 如何清除所有迁移并从头开始?

所以我现在正在快速迭代一个django应用程序,我不断调整models.py.在一两天的编程和测试过程中,我生成了几十个迁移文件.有时候我真的撕开了架构并完全重新做了.这会导致迁移过程对默认值和空值等抱怨很多.如果可能的话,我只想抓住所有迁移的东西并重新开始迁移,因为我终于知道我在做什么了.到目前为止,我的方法如下:

  1. 删除迁移文件夹中除了的所有内容__init__.py.
  2. 放入我的PostgreSQL控制台并执行: DELETE FROM south_migrationhistory WHERE app_name='my_app';
  3. 在PostgreSQL控制台上,删除与my_app关联的所有表.
  4. 重新运行./manage.py makemigrations my_app- 这会0001_initial.py在我的迁移文件夹中生成一个文件.
  5. run ./manage migrate my_app- 我希望这个命令重新构建我的所有表,但是它说:"没有要应用的迁移."

是什么赋予了?

此外,south_migrationhistory数据库表现在仍然在播放,我已经转向南并已切换到Django 1.7?

谢谢.

django database-migration django-south django-1.7 django-migrations

39
推荐指数
2
解决办法
3万
查看次数

在迁移中获取模型ContentType - Django 1.7

我有一个数据迁移,可以更新一些权限.我知道迁移中的权限存在一些已知问题,我可以通过自己的迁移(而不是使用模型中的元组快捷方式)创建权限来避免一些麻烦.

迁移:

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在测试中运行时,迁移中此时没有(不确定原因).按照这篇文章中的建议,我尝试在自己的迁移中手动更新内容类型.添加 …

django django-1.7 django-migrations

39
推荐指数
4
解决办法
8026
查看次数

Django"你有未应用的迁移".哪个?

Django runserver抱怨说:

You have unapplied migrations; 
your app may not work properly until they are applied. 
Run 'python manage.py migrate' to apply them.
Run Code Online (Sandbox Code Playgroud)

如何在不运行迁移的情况下找出未应用的迁移?

django django-migrations

38
推荐指数
3
解决办法
2万
查看次数

使用uuid字段的Django迁移会生成重复值

我有一个uuid字段(不是主键).生成的迁移是:

from __future__ import unicode_literals

from django.db import migrations, models
import uuid


class Migration(migrations.Migration):

    dependencies = [
        ....
    ]

    operations = [
        ...
        migrations.AddField(
            model_name='device',
            name='uuid',
            field=models.UUIDField(default=uuid.uuid4, unique=True),
        ),
        ...
    ]
Run Code Online (Sandbox Code Playgroud)

但是当python manage.py migrate它做的时候崩溃:

django.db.utils.IntegrityError:无法创建唯一索引"restaurants_device_uuid_key"DETAIL:Key(uuid)=(f3858ded-b8e0-4ac0-8436-8a61b10efc73)重复.

奇怪的是,主键(它可能是由数据库创建的,而不是由django内部创建的)似乎不会出现问题.

如何添加uuid字段,并确保迁移有效?

python django uuid django-migrations

37
推荐指数
3
解决办法
1万
查看次数