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

Django电商项目admin.E030错误求助:无法识别Category模型的name字段

Django电商项目admin.E030错误求助:无法识别Category模型的name字段

看起来你遇到的问题根源是模型代码里的语法错误,加上之前迁移文件的遗留问题导致的,我帮你一步步排查解决:

1. 先修复models.py里的核心错误

看你提供的Category模型代码,有两个关键问题:

  • name字段末尾多了个逗号:name = models.CharField(max_length = 150, db_index = True), 这个逗号会让Python把这个字段定义当成一个元组,Django无法正确识别为模型字段——这就是为什么第一次迁移时数据库里没有生成name字段的直接原因!
  • 类内部代码缩进错误:class Meta和__str__方法没有缩进到Category类内部,属于类外代码,Django也没法识别这些配置。

修正后的Category模型代码应该是这样的:

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

class Category(models.Model):
    name = models.CharField(max_length=150, db_index=True)  # 去掉末尾逗号,统一缩进
    slug = models.SlugField(max_length=150, unique=True)

    class Meta:
        verbose_name_plural = 'Categories'

    def __str__(self):
        return self.name

你的Product模型也存在同样的缩进问题,需要把class Meta和__str__方法缩进类内部,修正后代码如下:

class Product(models.Model):
    category = models.ForeignKey(Category, related_name='product', on_delete=models.CASCADE)
    created_by = models.ForeignKey(User, on_delete=models.CASCADE, related_name='product_creator')
    title = models.CharField(max_length=150)
    author = models.CharField(max_length=150, default='admin')
    description = models.TextField(blank=True)
    image = models.ImageField(upload_to='images/')
    slug = models.SlugField(max_length=150)
    price = models.DecimalField(max_digits=4, decimal_places=2)
    in_stock = models.BooleanField(default=True)
    is_active = models.BooleanField(default=True)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)

    class Meta:
        verbose_name_plural = 'Products'
        ordering = ('-created',)

    def __str__(self):
        return self.title

2. 清理旧的迁移遗留问题

因为之前的迁移文件是基于错误模型生成的,即使手动修改了数据库,Django的迁移系统还是会有冲突。如果是开发环境且数据库没有重要数据,建议按以下步骤操作:

  • 找到你的app目录下的migrations文件夹,删除里面除了__init__.py之外的所有文件
  • 删除项目根目录下的db.sqlite3数据库文件(如果用的是默认SQLite)
  • 重新生成迁移文件:
python manage.py makemigrations
  • 应用迁移到数据库:
python manage.py migrate

3. 验证修复效果

完成上面的步骤后,重启你的Django服务器,再尝试访问admin后台或运行其他Django命令,应该就不会再出现无法识别name字段的错误了。

补充说明:admin.E030错误通常就是指list_display里配置的字段在模型中不存在,之前因为模型语法错误导致Django没识别到name字段,所以admin会报这个错,修复模型后就能解决。

备注:内容来源于stack exchange,提问作者ArceusLegend50

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 15:53:03