造成这种限制的原因可能是,在你最初迁移它时,
slug在
Category类中没有任何字段被调用(第一次迁移),并且在模型中添加了该字段之后,当你运行时
makemigrations,你已将默认值设置为静态值值(即
None或”等),并且打破了类别表的表段列的唯一约束,其中表段应该是唯一的,但这不是因为所有条目都将获得该默认值。
为了解决这个问题,你可以删除数据库和迁移文件并重新运行
makemigrations,
migrate或者设置唯一的默认值,如下所示:
slug = models.SlugField(unique=True, default=uuid.uuid1)
编辑:
根据添加唯一字段的迁移,修改你的迁移文件以克服唯一约束。例如,修改你的迁移文件(将slug字段添加到模型中)如下:
import uuidfrom app.models import Category #where app == tango_app_nameclass Migration(migrations.Migration): dependencies = [ ('yourproject', '0003_remove_category_slug'), ] def gen_uuid(apps, schema_editor): for row in Category.objects.all(): row.slug = uuid.uuid4() row.save() operations = [ migrations.AddField( model_name='category', name='slug', field=models.SlugField(default=uuid.uuid4), preserve_default=True, ), migrations.RunPython(gen_uuid), migrations.AlterField( model_name='category', name='slug', field=models.SlugField(default=uuid.uuid4, unique=True), ), ]


