You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django开发点评API时slug字段UNIQUE约束失败如何解决

Django slug唯一约束报错问题解答

问题原因

  • Django自带的slugify函数默认不支持中文,若building_name为中文,slugify(self.building_name)会返回空字符串,第二条及以后数据入库时重复的空值会触发唯一约束冲突。
  • 你为SlugField设置的default=uuid.uuid1逻辑完全不生效,因为自定义save方法中强制覆盖了slug字段的值,没有用到默认的uuid生成规则。
  • 即使是英文建筑名,也可能出现不同名称经slugify处理后结果一致的情况(如大小写差异、特殊符号清洗后重合),同样会触发冲突。

解决办法

方案1:使用支持中文的拼音slug生成规则(推荐)

适合需要slug和建筑名有对应关系的场景:

  1. 安装拼音转换库:pip install pypinyin
  2. 修改buildingData模型的save方法:
from django.db import models
import uuid
from pypinyin import slugify as pinyin_slugify

class buildingData(models.Model):
    building_name = models.CharField(max_length=50, unique=True)
    slug = models.SlugField(unique=True, default=uuid.uuid1)
    building_loc = models.CharField(max_length=50)
    building_call = models.CharField(max_length=20)
    building_time = models.CharField(max_length=50)

    def save(self, *args, **kwargs):
        # 仅首次创建时生成slug,避免后续修改建筑名导致旧链接失效
        if not self.slug:
            base_slug = pinyin_slugify(self.building_name)
            # 追加6位随机uuid后缀保证全局唯一
            self.slug = f"{base_slug}-{uuid.uuid4().hex[:6]}"
        return super().save(*args, **kwargs)

方案2:直接使用uuid作为slug

不需要slug和建筑名关联的场景可以直接用这个方案,改动最小:
直接删除buildingData模型中自定义的save方法即可,原本设置的default=uuid.uuid1会自动生效,全局唯一不会触发冲突。

方案3:原生slugify加重复兜底(仅适合纯英文建筑名场景)

如果建筑名都是英文,不想引入额外依赖,可以加重复检测逻辑:

from django.utils.text import slugify

class buildingData(models.Model):
    # 原有字段不变
    def save(self, *args, **kwargs):
        if not self.slug:
            base_slug = slugify(self.building_name)
            current_slug = base_slug
            count = 1
            # 检测重复,重复则追加数字后缀
            while buildingData.objects.filter(slug=current_slug).exists():
                current_slug = f"{base_slug}-{count}"
                count += 1
            self.slug = current_slug
        return super().save(*args, **kwargs)

注意事项

修改代码后需要清空数据库中已存在的有重复slug的历史数据,再重新执行迁移操作,否则旧数据的冲突问题依然存在。

内容的提问来源于stack exchange,提问作者JYH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 21:06:02