我正在向模型添加一个新字段:
class Abc(models.Model):
...
slug = models.SlugField(unique=True)
Run Code Online (Sandbox Code Playgroud)
在此期间,Makemigrations我一劳永逸地提供了一个空字符串。然后Migrate因为重复的 key 失败了Key (slug)=() is duplicated。
以下是我试图解决的问题。makemigrations一切正常,但migrate由于同样的原因失败。
1) 删除unique=True并再次迁移
2)去除slug字段,再次迁移
3)unique=False再次设置迁移
无法删除数据库。我被卡住了,别无选择。有什么建议?
您遇到此问题是因为表中至少有两条记录具有相同的 slug。
要解决此问题,您可以执行以下步骤
./manage.py makemigrations <app_name> --empty在迁移文件中,在文件中添加django迁移的RunPython操作。一个例子类似于下面的片段。
from __future__ import unicode_literals
from django.db import models, migrations
from django.utils.text import slugify
def forwards(apps, schema_editor):
Abc = apps.get_model('app', 'Abc')
for obj in Abc.objects.all():
if len(obj.slug) == 0:
obj.slug = slugify(obj.field1)
obj.save()
class Migration(migrations.Migration):
dependencies = [
('app', '0003_Abc'),
]
operations = [
migrations.RunPython(forwards, reverse_code=migrations.RunPython.noop),
]
Run Code Online (Sandbox Code Playgroud)添加unique=True到字段。
创建迁移。 ./manage.py makemigrations <app_name>
迁移您的数据库。 ./manage.py migrate <app_name>
| 归档时间: |
|
| 查看次数: |
994 次 |
| 最近记录: |