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

修改Django的models.py时二次操作触发OperationalError列不存在问题

Django模型二次修改后触发OperationalError的解决方法

问题现象

每次修改或新增Django项目models.py中的模型,第二次操作时会触发如下数据库错误:

OperationalError at /admin/groups/group/
no such column: groups_group.کد

首次修改模型无异常,但执行python manage.py makemigrations、python manage.py migrate甚至指定app的迁移命令都无法解决该问题。

核心原因分析

  1. 字段参数配置错误:IntegerField不支持max_length参数,这是无效配置,会导致迁移逻辑异常
  2. 非ASCII字段名问题:使用波斯语作为字段名,可能引发Django迁移系统的编码识别或字段映射错误
  3. 迁移文件缓存/损坏:重复修改后,旧迁移文件与新模型结构不匹配,且未彻底清理残留记录

解决步骤

1. 修正模型字段配置

优先替换非ASCII字段名为英文(避免编码兼容问题),同时移除IntegerField的无效max_length参数,若需要后台显示波斯语名称,可通过verbose_name设置:

from django.db import models

class Group(models.Model):
    code = models.IntegerField(default=0)
    title = models.CharField(max_length=30, verbose_name="عنوان")
    description_one = models.CharField(max_length=100, verbose_name="توضیحات شماره یک")
    description_two = models.CharField(max_length=100, verbose_name="توضیحات شماره دو")
    description_three = models.CharField(max_length=100, verbose_name="توضیحات شماره سه")

    class Meta:
        verbose_name = "گروه"
        verbose_name_plural = "گروه‌ها"

2. 彻底清理并重建迁移

  • 删除groups应用下migrations目录中除__init__.py外的所有迁移文件
  • 通过数据库管理工具执行SQL,清除django_migrations表中与groups相关的记录:
    DELETE FROM django_migrations WHERE app='groups';
    
  • 重新生成并执行迁移:
    python manage.py makemigrations groups
    python manage.py migrate groups
    

3. 优化Admin后台配置(可选)

自定义Admin显示字段,确保后台操作正常:

from django.contrib import admin
from .models import Group

class GroupAdmin(admin.ModelAdmin):
    list_display = ('code', 'title', 'description_one')

admin.site.register(Group, GroupAdmin)

原问题相关代码

Models.py(原始)

from django.db import models

class Group(models.Model):
    کد = models.IntegerField(max_length = 5, default = 00000)
    عنوان = models.CharField(max_length = 30)
    توضیحات_شماره_یک = models.CharField(max_length = 100)
    توضیحات_شماره_دو = models.CharField(max_length = 100)
    توضیحات_شماره_سه = models.CharField(max_length = 100)

Views.py(原始)

from django.shortcuts import render

def groups(request):
    return render(request, "groups/groups.html")

def group(request):
    return render(request, "groups/group.html")

Urls.py(原始)

from django.urls import path
from . import views

urlpatterns = [
    path('', views.groups, name = "groups"),
    path('group/', views.group, name = "group")
]

Admin.py(原始)

from django.contrib import admin
from .models import Group

admin.site.register(Group)

内容的提问来源于stack exchange,提问作者amirali mirzaei zadeh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 12:43:10