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

Django开发遇两类报错:Slug查询无结果及migrate表已存在

问题排查与解决方案

一、Articles matching query does not exist. 报错解决

核心原因

  1. 数据库中无对应slug的文章记录,可能是旧文章未生成slug,或请求的slug与数据库存储值不一致
  2. 自定义save方法存在参数覆盖问题,导致slug生成逻辑异常
  3. 视图直接使用get()方法,未处理记录不存在的场景

解决步骤

  • 补全旧数据的slug
    进入Django Shell执行以下命令,为已存在的文章批量生成slug:

    from bloges.models import Articles
    from django.utils.text import slugify
    
    for article in Articles.objects.filter(slug__isnull=True) | Articles.objects.filter(slug=''):
        article.slug = slugify(article.Title)
        article.save()
    
  • 修复save方法的参数传递
    原方法覆盖默认参数,可能导致部分场景下slug不更新,修改为:

    def save(self, *args, **kwargs):
        # 仅当slug为空时自动生成,若需修改标题同步更新slug,可移除该判断
        if not self.slug:
            self.slug = slugify(self.Title)
        super().save(*args, **kwargs)
    
  • 优化视图的异常处理
    使用get_object_or_404替代get(),避免直接抛出服务器错误:

    from django.shortcuts import render, get_object_or_404
    from bloges.models import Articles
    
    def post(request, slug):
        articles = get_object_or_404(Articles, slug=slug)
        return render(request, 'bloges/post-details.html', {"postartic": articles})
    
  • 验证slug一致性
    检查数据库bloges_articles表的slug字段值,确认请求URL中的slug与存储值完全匹配(注意大小写、特殊字符转义)


二、django.db.utils.OperationalError: table "bloges_category" already exists 报错解决

核心原因

数据库中已存在bloges_category表,但Django的迁移记录未标记该表已创建,导致migrate时重复执行建表操作

解决步骤

场景1:本地开发环境(数据可重置)

  1. 删除数据库中的bloges_category表
  2. 重新执行迁移命令:
    python manage.py makemigrations
    python manage.py migrate
    

场景2:生产环境(需保留数据)

  1. 标记该表的迁移已完成,避免重复建表:
    # 重置bloges app的迁移状态
    python manage.py migrate --fake bloges zero
    # 重新生成迁移文件
    python manage.py makemigrations bloges
    # 标记迁移已应用(不实际修改数据库)
    python manage.py migrate --fake bloges
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 05:15:26