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

Django开发遇‘类未定义’错误,附模型与Admin代码求助

Django「类未定义」错误排查与修复

问题根源分析

你的代码中存在以下关键问题,直接引发了「类未定义」错误:

1. CustomUser类缩进错误(核心原因)

Python是缩进敏感语言,类内部的属性和方法必须通过缩进明确归属。你model.py中的USER元组、user_type、profile_pic字段均未缩进,不属于CustomUser类的成员,这会触发Python语法错误,导致CustomUser类无法被正确定义,admin模块导入时自然会提示类未定义。

2. 类型不匹配与字符串转义问题

  • user_type的default值设为数字1,但该字段是CharField,必须传入字符串类型的值'1'。
  • Session_Year的__str__方法中使用了错误的转义语法\" To \",会引发字符串解析错误。

3. ImageField路径与必填性问题

profile_pic的upload_to路径无需包含media(Django会自动基于MEDIA_ROOT拼接路径),且未设置blank=True和null=True,会导致创建用户时必须上传头像,引发不必要的验证错误。


修正后的代码

model.py

from django.db import models
from django.contrib.auth.models import AbstractUser

# 自定义用户模型
class CustomUser(AbstractUser):
    USER = (
        ('1', 'HOD'),
        ('2', 'STAFF'),
        ('3', 'STUDENT'),
    )
    user_type = models.CharField(choices=USER, max_length=50, default='1')
    profile_pic = models.ImageField(upload_to='profile_pic', blank=True, null=True)

# 课程模型
class Course(models.Model):
    name = models.CharField(max_length=100)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.name

# 学年模型
class Session_Year(models.Model):
    session_start = models.CharField(max_length=100)
    session_end = models.CharField(max_length=100)

    def __str__(self):
        return f"{self.session_start} To {self.session_end}"

admin.py

from django.contrib import admin
from .models import *
from django.contrib.auth.admin import UserAdmin

class UserModel(UserAdmin):
    list_display = ['username','user_type']

admin.site.register(CustomUser, UserModel)
admin.site.register(Course)
admin.site.register(Session_Year)  # 取消注释即可注册学年模型

修复步骤

  1. 将上述修正后的代码替换到对应文件中。
  2. 执行数据库迁移命令,确保模型变更生效:
python manage.py makemigrations
python manage.py migrate
  1. 重启Django开发服务器,验证错误是否解决。

内容的提问来源于stack exchange,提问作者Jirus Jai Camacho

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 03:38:27