# management/commands/updateslugs.py
from django.core.management.base import BaseCommand
from utils.djcslugify import DJCSlugify
from blog.models import Article, Category, Tag
class Command(BaseCommand):
help = '更新所有模型的slug'
def handle(self, *args, **options):
models = [Article, Category, Tag]
for model in models:
self.stdout.write(f"更新 {model.__name__} ...")
result = DJCSlugify.update_existing_slugs(
model_class=model,
verbose=False
)
self.stdout.write(
self.style.SUCCESS(
f" ✓ 完成: 更新{result['updated']}条,跳过{result['skipped']}条"
)
)</code></pre></div><div class="hyc-code-scrollbar__track" style="bottom:4px;height:7px;left:4px;position:absolute;right:4px;"><div class="hyc-code-scrollbar__thumb" style="display:block;height:100%;position:relative;width:0px;"> </div></div><div style="border-radius:3px;bottom:2px;position:absolute;right:2px;top:2px;width:6px;"><div style="background-color:rgba(0, 0, 0, 0.2);border-radius:inherit;cursor:pointer;display:block;height:0px;position:relative;width:100%;"> </div></div></div></div><div class="ybc-p">运行命令:</div><div class="hyc-common-markdown__code"><div class="hyc-common-markdown__code__hd"> </div><div class="hyc-code-scrollbar" style="height:100%;overflow:hidden;position:relative;width:100%;"><div class="hyc-code-scrollbar__view" style="inset:0px;margin-bottom:-13px;margin-right:-13px;overflow:scroll;position:relative;"><pre><code class="language-bash">python manage.py update_slugs</code></pre></div><div class="hyc-code-scrollbar__track" style="bottom:4px;height:7px;left:4px;position:absolute;right:4px;"><div class="hyc-code-scrollbar__thumb" style="display:block;height:100%;position:relative;width:0px;"> </div></div><div style="border-radius:3px;bottom:2px;position:absolute;right:2px;top:2px;width:6px;"><div style="background-color:rgba(0, 0, 0, 0.2);border-radius:inherit;cursor:pointer;display:block;height:0px;position:relative;width:100%;"> </div></div></div></div><hr><h2>🎪 实战示例</h2><h3>示例1:CMS文章系统</h3><div class="hyc-common-markdown__code"><div class="hyc-common-markdown__code__hd"> </div><div class="hyc-code-scrollbar" style="height:100%;overflow:hidden;position:relative;width:100%;"><div class="hyc-code-scrollbar__view" style="inset:0px;margin-bottom:-13px;margin-right:-13px;overflow:scroll;position:relative;"><pre><code class="language-python"># models.py
from django.db import models
from utils.djc_slugify import SlugMixin
class Category(SlugMixin, models.Model):
name = models.CharField(maxlength=100, verbosename="分类名")
slugsourcefield = 'name' # 从name生成slug
class Meta:
verbose_name = "分类"
verbose_name_plural = "分类"
class Article(SlugMixin, models.Model):
title = models.CharField(maxlength=200, verbosename="标题")
content = models.TextField(verbosename="内容")
category = models.ForeignKey(Category, ondelete=models.CASCADE, verbosename="分类")
published = models.BooleanField(default=False, verbosename="已发布")
def __str__(self):
return self.title
class Meta:
verbose_name = "文章"
verbose_name_plural = "文章"
ordering = ['-id']
使用
category = Category(name="编程技术")
category.save() # 自动生成slug: bian-cheng-ji-shu
article = Article(
title="Python入门指南",
content="...",
category=category
)
article.save() # 自动生成slug: python-ru-men-zhi-nan