django - Django slugs 不是唯一的 unique=True
问题描述
我创建了两篇标题为“测试”的文章,这是第二篇生成的错误:
duplicate key value violates unique constraint "xxx_content_slug_xxxx_uniq"
DETAIL: Key (slug)=(test) already exists.
知道这是我的模型:
class Content()
slug = models.SlugField(unique=True)
def save(self, *args, **kwargs):
self.slug = slugify(self.title)
super(Content, self).save(*args, **kwargs)
并且知道我在数据库中进行了迁移。
我不知道如何解决。
注意:问题是由继承内容类的类帖子产生的,我认为这些信息在这种情况下没有帮助。
解决方案
slugify
不检查唯一性,因此如果您创建两篇具有相同标题的文章,slugify(self.title)
将生成两次相同的 slug,这当然会导致数据库抱怨违反唯一性约束。
在字段上设置unique = True
,不会自动为每个新实例创建唯一值,它只会在数据库上创建一个约束,相同的值不能被保存两次。
您可以使用django-autoslug,这是一个完全满足您需要的库。
只需安装软件包,然后像这样实现您的字段:
from django.db.models import CharField, Model
from autoslug import AutoSlugField
class Content(models.Model)
title = CharField(max_length=200)
slug = AutoSlugField(populate_from='title')
AutoSlugField
执行以下操作:
- 从另一个领域填充自己,
- 保持价值的唯一性和
- 使用自定义 slugify() 函数以获得更好的 i18n。
(另外,我假设它Content
是 的子类Model
,否则您的代码将根本无法工作。)
推荐阅读
- mysql - 不能在 MySQL 工作台 8.0(MySQL 版本 5.7.31)中使用“over”子句
- python - 在 python 中使用 dsbulk 加载
- python - cx_Freeze 错误:ModuleNotFoundError:没有名为“pydicom”的模块
- animation - 在 ScrollView 中使用matchedGeometryEffect 动画的问题
- oop - 另一个对象中的对象不在单元之间保持不变 Delphi
- python - 如何将字典列表转换为字典?
- wordpress - 子目录下的 WordPress 网站无法正常工作
- python - 如何根据以上行选择行 | Python - 熊猫
- javascript - 期望 false 在邮递员上完全等于 true
- python - 动态嵌套字典访问