[英]IntegrityError: column slug is not unique
我正在通过tangowithdjango教程学习django,在第7章我已经堆叠了。
我正在尝试在我的模型中包含一个slug字段并覆盖save方法以使其全部工作。 迁移后我有完整性错误。
models.py:
class Category(models.Model):
name = models.CharField(max_length=128, unique=True)
views = models.IntegerField(default=0)
likes = models.IntegerField(default=0)
slug = models.SlugField(unique=True)
def save(self, *args, **kwargs):
self.slug = slugify(self.name)
super(Category, self).save(*args, **kwargs)
class Meta:
verbose_name_plural = "Categories"
def __unicode__(self):
return self.name
谢谢!
听取错误。 您将slug属性指定为唯一,但对于Category
类的多个实例,您必须具有相同的slug值。
如果向已有数据的表添加唯一属性列,则很容易发生这种情况,因为您使用的任何常量默认值都将自动中断唯一约束。
要进行迁移......
您将需要先迁移到只添加slug-field,而不指定为unqiue,然后为数据库中的每个Category
设置一个唯一的slug,然后您可以添加唯一约束并再次迁移。
在应用的迁移目录中打开最近的迁移,然后编辑与其类似的行
migrations.AddField(
model_name='category',
name='slug',
field=models.SlugField(unique=True),
preserve_default=False,
),
所以它就是这样
migrations.AddField(
model_name='category',
name='slug',
field=models.SlugField(null=True, blank=True),
preserve_default=False,
),
然后使用python manage.py migrate
运行python manage.py migrate
(如果你使用django 1.7。否则使用South进行迁移),然后用python manage.py shell
打开django python manage.py shell
,导入你的Category模型并运行
for cat in Category.objects.all():
cat.slug = cat.name
cat.save()
这会将每个类别的slug设置为类别的名称。 现在,假设所有名称都是唯一的,您可以再次创建迁移并成功迁移,以便DB强制使用唯一的slug。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.