标签: django-migrations

Django 民意调查教程在应用程序民意调查中未检测到任何更改

我正在阅读 Django Polls 教程,我正在尝试命令“python manage.py makemigrations polls”,但我不断收到消息“在应用程序‘民意调查’中未检测到任何更改”

我不明白我做错了什么,或者我如何做不同的事情,或者这个信息意味着什么。

为清楚起见编辑:

我希望有点像教程中的打印输出:

Migrations for 'polls':
  0001_initial.py:
    - Create model Question
    - Create model Choice
Run Code Online (Sandbox Code Playgroud)

然后在本教程的后面,当它要求我输入命令python manage.py sqlmigrate polls 0001时,我会得到某种打印输出,就像显示的那样(相当长)。我正在https://docs.djangoproject.com/en/1.7/intro/tutorial01/完成教程

相反,我得到

CommandError: Cannot find a migration matching 'polls' form app '0001'. Is it in INSTALLED_APPS?
Run Code Online (Sandbox Code Playgroud)

python django django-migrations

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

如何将唯一性与冲突数据一起引入?

我为我的网站编写了一个 qna 脚本,为了防止用户开始讨论,我希望每个用户只能回复一次。

class Q(models.Model):
  text = models.TextField()
  user = models.ForeignKeyField('auth.User')

class A(models.Model):
  text = models.TextField()
  user = models.ForeignKeyField('auth.User')
  q = models.ForeignKeyField('Q')
  class Meta:
    unique_together = (('user','q'),)
Run Code Online (Sandbox Code Playgroud)

现在迁移给了我:

return Database.Cursor.execute(self, query, params)
  django.db.utils.IntegrityError: columns user_id, q_id are not unique
Run Code Online (Sandbox Code Playgroud)

当然,独特之处与现有数据发生冲突。我现在需要知道的是如何告诉迁移删除冲突的答案。一个愚蠢的解决方案,比如保留第一个找到的解决方案已经是一个很大的帮助。更好的是通过自定义函数比较冲突的 A 的方法。

我正在使用新的迁移系统运行 Django-1.7 - 而不是 South。

谢谢你的帮助!

django django-database django-1.7 django-migrations

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

Django 1.8 迁移:django_content_type 不存在

我刚刚将我的 django 从 1.7.1 升级到 1.8.4。我试图运行,python manage.py migrate但出现此错误:

django.db.utils.ProgrammingError: relation "django_content_type" does not exist

我删除了我的数据库,创建了一个新数据库,然后再次运行该命令。但我得到了同样的错误。我错过了什么吗?我需要做些什么来升级我的 Django 吗?

编辑:我降级回 1.7.1 并且它有效。有没有办法为 1.8.4 修复它?

django python-2.7 django-1.7 django-migrations django-1.8

4
推荐指数
2
解决办法
9080
查看次数

创建组的Django数据迁移的正确方法?

我想创建可以创建权限和组的数据迁移,以便其他开发人员可以运行迁移并进行所有设置。我能够创建迁移并很好地运行它们,但是现在运行测试时出现错误。

但是,如果我这样做:

from django.contrib.auth.models import Group

def add_operations_group(apps, schema_editor):
    Group.objects.get_or_create(name='operations')
Run Code Online (Sandbox Code Playgroud)

我得到:

django.db.utils.OperationalError: no such table: auth_group
Run Code Online (Sandbox Code Playgroud)

如果我这样做:

def add_operations_group(apps, schema_editor):
    Group = apps.get_model("django.contrib.auth", "group")
    Group.objects.get_or_create(name='operations')
Run Code Online (Sandbox Code Playgroud)

我得到:

LookupError: No installed app with label 'django.contrib.auth'
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?还是有一种“ Django方式”来确保创建权限和组之类的东西?

django django-migrations

4
推荐指数
2
解决办法
2828
查看次数

Django Table已经存在

这是我的Django迁移文件。当我跑步

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

我得到这个错误。

Error:-

    django.db.utils.OperationalError: (1050, "Table 'tickets_duration' already exists")
Run Code Online (Sandbox Code Playgroud)

我删除了数据库并运行它,但仍然遇到相同的错误。

class Migration(migrations.Migration):

    dependencies = [
    ]

    operations = [
        migrations.CreateModel(
            name='Duration',
            fields=[
                ('Id', models.UUIDField(primary_key=True, db_column=b'duration_id', default=uuid.uuid4, serialize=False, editable=False)),
                ('duration', models.CharField(max_length=200, db_column=b'duration')),
            ],
        ),
        migrations.CreateModel(
            name='ErrorCount',
            fields=[
                ('Id', models.UUIDField(primary_key=True, db_column=b'error_id', default=uuid.uuid4, serialize=False, editable=False)),
                ('error', models.CharField(max_length=200, db_column=b'error')),
            ],
        ),
        migrations.CreateModel(
            name='OutageCaused',
            fields=[
                ('Id', models.UUIDField(primary_key=True, db_column=b'error_id', default=uuid.uuid4, serialize=False, editable=False)),
                ('outage_caused', models.CharField(max_length=200, db_column=b'outage_caused')),
            ],
        ),
        migrations.CreateModel(
            name='Pg',
            fields=[
                ('Id', models.UUIDField(primary_key=True, db_column=b'pg_id', default=uuid.uuid4, serialize=False, editable=False)),
                ('pg_cd', models.CharField(max_length=200, db_column=b'pg_cd')),
            ],
        ),
        migrations.CreateModel(
            name='SystemCaused', …
Run Code Online (Sandbox Code Playgroud)

python django django-migrations

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

为什么在创建数据迁移时使用apps.get_model()?

根据创建django迁移时的django文档,我们应该使用apps.get_model()而不是导入模型并使用它们.

为什么数据迁移必须使用模型的历史版本而不是最新版本?(模型的历史版本不会正在使用吗?)

django-models django-migrations

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

Django 迁移失败 - 无法查询“peterson”:必须是“User”实例

我使用的是 Django 1.9,Python 3.6。我进行了此迁移,以尝试为缺少它们的任何用户填写 UserProfiles。

但我收到以下错误。

奇怪的是“用户”变量似乎是一个用户实例。

from __future__ import unicode_literals
from django.db import migrations
from django.contrib.auth.models import User


def create_missing_profiles(apps, schema_editor):
    UserProfile = apps.get_model("myapp", "UserProfile")
    for user in User.objects.all():
        UserProfile.objects.get_or_create(user=user)


class Migration(migrations.Migration):

    dependencies = [
        ('myapp', '0004_auto_20170721_0908'),
    ]

    operations = [
        migrations.RunPython(create_missing_profiles),
    ]
Run Code Online (Sandbox Code Playgroud)

错误:

ValueError:无法查询“peterson”:必须是“User”实例。

python migration django django-migrations

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

检查是否需要合并迁移,没有数据库

要检查是否需要合并迁移,我可以运行manage.py makemigrations --checkmanage.py makemigrations --dry-run

但是,这两者都需要数据库启动。如果它没有启动,它会出现类似的错误

django.db.utils.OperationalError: (2002, "Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)")

从理论上讲,由于具有相同父级的两次迁移会导致合并迁移问题,因此您不需要数据库实例来检查这种情况。

我需要这个,因为我希望我的 CI 检查这个案例。我可以启动一个 docker 数据库,但对于那些甚至不依赖于逻辑的东西来说,这是一项额外的工作。我也确信有些人有兴趣在他们的 CI 中检查这个,他们不想处理容器化。

有没有人找到一种无需数据库即可检查迁移合并冲突的简单方法?

python django django-migrations

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

Django tests fails when using a specific model in a migration file

I've manually created a data migration file for a specific Django 1.11 app:

from __future__ import unicode_literals
from django.db import migrations, models

def set_item_things(apps, schema_editor):
    MyModel = apps.get_model('my_app', 'MyModel')
    # NOTE: if I remove this line then the tests will work
    MyOtherModel = apps.get_model('my_other_app', 'MyOtherModel')

    for item in MyModel.objects.all():
        # NOTE: if I remove this line then the tests will work
        thingy = MyOtherModel.get(example_field=item.color) 
        item.other_thing = thingy
        item.save()

class Migration(migrations.Migration):
    dependencies = [
        ('contracts', '0014_my_previous_migration'),
    ]

    operations = [
        migrations.RunPython(set_item_things), …
Run Code Online (Sandbox Code Playgroud)

python django django-apps django-migrations

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

django.db.utils.ProgrammingError:“WITH ORDINALITY”第 6 行或附近的语法错误:

在 django 2.1 应用程序上进行迁移时出现错误

from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

    dependencies = [
        ('sawy', '0005_auto_20190418_0607'),
    ]

    operations = [
        migrations.AlterField(
            model_name='response',
            name='action',
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='response', to='sawy.Action'),
        ),
    ]
Run Code Online (Sandbox Code Playgroud)

错误:

 Applying sawy.0006_auto_20190418_0608...Traceback 
....
....
....

django.db.utils.ProgrammingError: syntax error at or near "WITH ORDINALITY" LINE 6:
Run Code Online (Sandbox Code Playgroud)
  • Python版本:3.6
  • Django 版本:2.1.4
  • 数据库:Postgres

编辑

模态

class Response(models.Model):
    action = models.ForeignKey(Action, on_delete=models.CASCADE, related_name='response')
    text = models.TextField(blank=True,unique=True)
    def __str__(self):
        return self.text
Run Code Online (Sandbox Code Playgroud)

python django django-migrations django-2.1

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