使用Django EAV 2触发ValueError:not enough values to unpack (expected 2, got 0)
问题描述
使用Django EAV 2时,访问产品添加页面(http://127.0.0.1:8000/admin/shop/product/add/)触发如下错误:
- 异常类型:
ValueError - 异常信息:
not enough values to unpack (expected 2, got 0) - 异常位置:
django/forms/widgets.py第772行的_choice_has_empty_value方法中 - 模板错误位置:
admin/includes/fieldset.html第25行的{{ field.field }}
相关Admin代码:
from django.contrib import admin from .models import Product from eav.forms import BaseDynamicEntityForm from eav.admin import BaseEntityAdmin # Register your models here. class ProductAdminForm(BaseDynamicEntityForm): model = Product class ProductAdmin(BaseEntityAdmin): form = ProductAdminForm admin.site.register(Product, ProductAdmin)
环境信息:
- Django版本:5.1.1
- 触发场景:后台添加产品页面
解决方案
这个错误是因为某个EAV属性的选项列表为空导致的——具体来说是Choice类型的Attribute没有配置任何Option选项,Django表单渲染时无法解析空的choices列表,触发了解包错误。
解决步骤:
- 登录Django后台,找到EAV模块的
Attribute管理页面 - 检查所有类型为
Choice的Attribute:- 如果某个Choice类型Attribute没有添加任何
Option,立即添加至少一个选项(每个Option需要设置值和显示文本)
- 如果某个Choice类型Attribute没有添加任何
- 确认Product模型已正确关联EAV:
- 确保Product模型继承自
eav.models.Entity,或者通过EAV.register(Product)完成注册(如果用的是装饰器或手动注册方式)
- 确保Product模型继承自
- 测试验证:添加完选项后刷新产品添加页面,错误应该会消失
如果暂时不需要该Choice属性,可以先将其类型改为Text或其他非选择类型,也能临时解决问题。
内容的提问来源于stack exchange,提问作者Asxetos
相关产品推荐
相关产品推荐

