我正在阅读 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) 我为我的网站编写了一个 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 从 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 修复它?
我想创建可以创建权限和组的数据迁移,以便其他开发人员可以运行迁移并进行所有设置。我能够创建迁移并很好地运行它们,但是现在运行测试时出现错误。
但是,如果我这样做:
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迁移文件。当我跑步
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) 根据创建django迁移时的django文档,我们应该使用apps.get_model()而不是导入模型并使用它们.
为什么数据迁移必须使用模型的历史版本而不是最新版本?(模型的历史版本不会正在使用吗?)
我使用的是 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”实例。
要检查是否需要合并迁移,我可以运行manage.py makemigrations --check或manage.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 中检查这个,他们不想处理容器化。
有没有人找到一种无需数据库即可检查迁移合并冲突的简单方法?
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) 在 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)
编辑
模态
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) django ×9
python ×6
django-1.7 ×2
django-1.8 ×1
django-2.1 ×1
django-apps ×1
migration ×1
python-2.7 ×1