【问题标题】:django-import-export adding widgets to the model resourcedjango-import-export 将小部件添加到模型资源
【发布时间】:2018-09-25 19:38:34
【问题描述】:
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”字段时使用 django-import-export 十进制小部件;这是因为 excel 将所有整数作为浮点数吐出。我只是不确定如何在这种情况下将小部件应用于 DecimalTest 字段。任何帮助将不胜感激。

【问题讨论】:

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


    【解决方案1】:

    在使用 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)
    

    然后修改fields.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')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-06-12
      • 1970-01-01
      • 2017-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多