django-import-export将小部件添加到模型资源

时间:2018-04-16 06:38:01

标签: python-3.x django-2.0 django-import-export

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字段。任何帮助将不胜感激。

1 个答案:

答案 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')