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

django-eav2入门执行makemigrations两类报错问题求助

问题原因

错误1:django.db.utils.OperationalError: no such table: eav_attribute

原因:你将Attribute.objects.create的数据库操作直接写在了models.py的顶层代码中。Django运行makemigrations命令时会先加载所有应用的models.py文件,此时django-eav2的数据库迁移还未执行,eav_attribute表根本不存在,直接操作数据库必然报错。

错误2:TypeError: register_eav() takes 0 positional arguments but 1 was given

原因:你使用的django-eav2 1.1.0版本中,register_eav装饰器需要加括号调用,正确写法是@register_eav(),而你没有加括号,直接写成@register_eav就会触发参数匹配错误。

解决步骤
  • 第一步:删除models.py中所有Attribute.objects.create的代码,初始化属性的操作不能放在models.py顶层执行。
  • 第二步:确认settings.py的INSTALLED_APPS列表中已经添加了'eav',这是很多新手容易遗漏的配置项。
  • 第三步:选择其中一种注册方式即可:
    1. 函数注册方式:保留eav.register(Answer)代码在models.py末尾即可
    2. 装饰器注册方式:将@register_eav修改为@register_eav()
  • 第四步:先执行django-eav2本身的迁移,创建基础表:
    python manage.py migrate eav
    
  • 第五步:再执行你自己应用的迁移:
    python manage.py makemigrations 你的应用名称
    python manage.py migrate
    
  • 第六步:待所有迁移执行完成后,再创建你需要的Attribute属性。你可以通过python manage.py shell进入Django交互环境,手动执行那几行Attribute.objects.create代码,也可以编写独立的数据迁移文件完成初始化,不要将这部分代码写在models.py中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 00:15:05