class AccountResource(resources.ModelResource):
class Meta:
model = Account
skip_unchanged = True
report_skipped = False
import_id_fields = ('ID',)
fields = ('ID', 'Rank_Test', 'UName', 'DecimalTest')
大家好,以上代码是我用作django-import-export的模型资源的代码。我想要完成的是在导入“DecimalTest”时。 field使用django-import-export十进制小部件;这是因为excel以浮动方式吐出所有整数。我只是不确定如何在此上下文中将小部件应用于DecimalTest字段。任何帮助将不胜感激。
答案 0 :(得分:0)
使用import_export的DecimalWidget在0.111和0.1110之间比较浮点值时存在一些问题。所以我重新定义了一个自定义的DecimalWidget。
from django.db.backends import utils
from import_export import widgets
class CustomDecimalWidget(widgets.DecimalWidget):+
DECIMAL_MAX_DIGITS = 8
DECIMAL_MAX_PLACES = 2
def clean(self, value, row=None, *args, **kwargs):
if self.is_empty(value):
return None
return utils.format_number(value, self.DECIMAL_MAX_DIGITS, self.DECIMAL_MAX_PLACES)
然后修改field.Field类的widget
并将其分配给DecimalTest。
from import_export import fields
class AccountResource(resources.ModelResource):
DecimalTest = fields.Field(
column_name='DecimalTest', attribute='DecimalTest', widget=CustomDecimalWidget())
class Meta:
model = Account
skip_unchanged = True
report_skipped = False
import_id_fields = ('ID',)
fields = ('ID', 'Rank_Test', 'UName', 'DecimalTest')