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

Django运行migrate等命令报no such table: django_session错误求助

问题解决与开发实现指引

一、django.db.utils.OperationalError: no such table: django_session 报错解决

直接按以下顺序执行操作即可解决:

  • 先删除项目根目录的SQLite数据库文件db.sqlite3,再删除audioma_manager应用下migrations目录中除__init__.py外的所有文件
  • 确认audioma_manager已经添加到settings.py的INSTALLED_APPS列表中,未添加会导致迁移不生效
  • 执行python manage.py makemigrations audioma_manager生成应用专属迁移文件
  • 先执行依赖迁移python manage.py migrate auth,session表属于auth模块依赖表,优先迁移可避免生成异常
  • 最后执行全量迁移python manage.py migrate,此时session表已正常生成,后续执行runserver等命令不会再抛出该错误

如果使用MySQL/PostgreSQL等非SQLite数据库,额外确认数据库服务运行正常、配置的数据库用户具备建表权限后再走上述流程即可。

二、需求实现步骤

1. 仓库创建、项目初始化与首次提交

  • 本地新建项目根目录后执行git init初始化Git仓库
  • 根目录新建.gitignore文件,添加忽略规则:
    # Django运行生成文件
    db.sqlite3
    /static/
    /media/
    *.pyc
    __pycache__/
    # 敏感配置文件
    .env
    # IDE配置
    .vscode/
    .idea/
    
  • 执行django-admin startproject audioma_manager .初始化Django项目结构
  • 依次执行git add .、git commit -m "feat: 初始化Django项目基础结构"完成首次提交

2. 基于django-environ的配置实现

  • 先执行pip install django-environ安装依赖
  • 在settings.py头部导入并初始化environ:
    import environ
    env = environ.Env()
    environ.Env.read_env(env_file='.env')
    
  • 项目根目录新建.env文件,添加配置项:
    # 企业API认证信息
    ENTERPRISE_API_KEY=你的企业API密钥
    ENTERPRISE_API_BASE_URL=https://你的企业API根域名
    # 存储与命名配置
    AUDIO_UPLOAD_PATH=uploads/audio/
    AUDIO_FILE_NAMING_RULE={user_id}_{timestamp}_{original_name}
    
  • 在settings.py末尾添加对应配置读取逻辑:
    # 企业API配置
    ENTERPRISE_API_KEY = env('ENTERPRISE_API_KEY')
    ENTERPRISE_API_BASE_URL = env('ENTERPRISE_API_BASE_URL')
    # 转录文件配置
    AUDIO_UPLOAD_PATH = env('AUDIO_UPLOAD_PATH', default='uploads/audio/')
    AUDIO_FILE_NAMING_RULE = env('AUDIO_FILE_NAMING_RULE', default='{timestamp}_{original_name}')
    

3. Transcription模型开发

在audioma_manager应用的models.py中添加模型定义:

from django.db import models

class Transcription(models.Model):
    id = models.BigAutoField(primary_key=True)
    file_name = models.CharField(max_length=255, verbose_name='文件名')
    created_at = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
    updated_at = models.DateTimeField(auto_now=True, verbose_name='更新时间')
    
    class Meta:
        verbose_name = '转录任务'
        verbose_name_plural = verbose_name
        db_table = 'transcription'
    
    def __str__(self):
        return self.file_name

新增后执行python manage.py makemigrations、python manage.py migrate即可生成对应数据表。

4. 企业API源列表拉取客户端实现

在audioma_manager应用下新建api_client.py:

import requests
from django.conf import settings

class EnterpriseAPIClient:
    def __init__(self):
        self.base_url = settings.ENTERPRISE_API_BASE_URL
        self.headers = {
            "Authorization": f"Bearer {settings.ENTERPRISE_API_KEY}",
            "Content-Type": "application/json"
        }
    
    def list_api_sources(self, name_filter=None, representation=True):
        params = {}
        # 支持按名称筛选
        if name_filter:
            params["name"] = name_filter
        # 支持representation查询参数
        if representation:
            params["representation"] = "full"
        resp = requests.get(
            f"{self.base_url}/api/sources",
            headers=self.headers,
            params=params
        )
        resp.raise_for_status()
        return resp.json()

5. 转录提交表单页面开发

表单类定义(forms.py)

from django import forms
from .api_client import EnterpriseAPIClient

class TranscriptionSubmitForm(forms.Form):
    date = forms.DateField(label="提交日期", widget=forms.DateInput(attrs={"type": "date"}))
    api_source = forms.ChoiceField(label="API源", choices=[])
    language = forms.ChoiceField(label="语言", choices=[
        ("zh", "中文"),
        ("en", "英文"),
        ("ja", "日文")
    ])
    title = forms.CharField(label="标题", max_length=255)
    extra_config = forms.JSONField(label="可选配置", required=False, widget=forms.Textarea(attrs={"rows": 3}))
    
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        # 动态拉取API源填充下拉选项
        client = EnterpriseAPIClient()
        sources = client.list_api_sources()
        self.fields["api_source"].choices = [(item["id"], item["name"]) for item in sources]

视图定义(views.py)

from django.shortcuts import render, redirect
from .forms import TranscriptionSubmitForm
from .models import Transcription

def submit_transcription(request):
    if request.method == "POST":
        form = TranscriptionSubmitForm(request.POST)
        if form.is_valid():
            # 可在此处添加调用企业API提交转录任务的逻辑
            Transcription.objects.create(
                file_name=form.cleaned_data["title"]
            )
            return redirect("submit_success")
    else:
        form = TranscriptionSubmitForm()
    return render(request, "submit_transcription.html", {"form": form})

模板文件(templates/submit_transcription.html)

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>提交转录任务</title>
</head>
<body>
    <h1>转录任务提交</h1>
    <form method="post">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">提交任务</button>
    </form>
</body>
</html>

最后在项目urls.py中添加对应路由即可访问该页面。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 15:36:04