此限制的原因可能是您没有任何名为的字段slug
in Category
当您最初迁移它(第一次迁移)时,以及在模型中添加此字段后,当您运行时makemigrations
,您已将默认值设置为静态值(即None
or ''
等),这打破了类别表 slug 列的唯一约束,其中 slug 应该是唯一的,但事实并非如此,因为所有条目都会获得该默认值。
要解决此问题,您可以删除数据库和迁移文件并重新运行makemigrations
and migrate
或设置一个唯一的默认值,如下所示:
slug = models.SlugField(unique=True, default=uuid.uuid1)
Edit:
根据添加独特字段的迁移 https://docs.djangoproject.com/en/2.2/howto/writing-migrations/#migrations-that-add-unique-fields,修改您的迁移文件以克服唯一约束。例如,修改您的迁移文件(将 slug 字段添加到模型中),如下所示:
import uuid
from app.models import Category # where app == tango_app_name
class 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),
),
]