如何为Django-Import-Export的AccountResource导入添加DecimalWidget
解决Django-Import-Export导入Excel浮点数转Decimal的问题
这问题我之前也碰到过——Excel总是把整数导出成带.0的浮点数,导入的时候确实容易出问题,不过用DecimalWidget就能轻松搞定,直接在你的AccountResource里给DecimalTest字段指定对应的Widget就行,具体实现步骤如下:
1. 导入需要的Widget模块
首先要确保你导入了DecimalWidget:
from import_export import resources, fields from import_export.widgets import DecimalWidget from .models import Account # 替换成你的模型实际导入路径
2. 修改AccountResource,指定DecimalTest字段的Widget
在资源类里显式定义DecimalTest字段,并绑定DecimalWidget:
class AccountResource(resources.ModelResource): # 给DecimalTest字段指定DecimalWidget,处理Excel的浮点数/整数转Decimal DecimalTest = fields.Field( attribute='DecimalTest', widget=DecimalWidget() ) class Meta: model = Account skip_unchanged = True report_skipped = False import_id_fields = ('ID',) fields = ('ID', 'Rank_Test', 'UName', 'DecimalTest')
额外说明
DecimalWidget会自动识别Excel里的整数(如5)、浮点数(如5.0、3.14),把它们转换成Django的Decimal类型,完美适配模型里的DecimalField。- 如果需要自定义小数精度,可以给
DecimalWidget传递decimal_places参数,比如强制保留两位小数:widget=DecimalWidget(decimal_places=2)。 - 如果要处理空单元格场景,可以设置
default参数,比如widget=DecimalWidget(default=None),避免导入空值时报错。
内容的提问来源于stack exchange,提问作者CodeHard
相关产品推荐
相关产品推荐

