Django Import-export TypeError:clean得到了意外的关键字参数'row'

问题描述

导入csv文件时,会出现以下错误。我认为这与日期小部件有关?

这是我的csv的示例:

“,ICE,法国,EST当前,HD,4.59,EUR,GROSS,01/01/08,,测试”

Traceback (most recent call last):
File "/usr/local/lib/python3.6/site-packages/import_export/resources.py",line 662,in import_row
self.import_obj(instance,row,dry_run)
File "/usr/local/lib/python3.6/site-packages/import_export/resources.py",line 516,in import_obj
self.import_field(field,obj,data)
File "/usr/local/lib/python3.6/site-packages/import_export/resources.py",line 499,in import_field
field.save(obj,data,is_m2m)
File "/usr/local/lib/python3.6/site-packages/import_export/fields.py",line 110,in save
cleaned = self.clean(data)
File "/usr/local/lib/python3.6/site-packages/import_export/fields.py",line 66,in clean
value = self.widget.clean(value,row=data)
TypeError: clean() got an unexpected keyword argument 'row'

资源的构建是这样的 就像我说的那样,我无法确定引发此错误的窗口小部件是什么。这就是为什么我将所有类粘贴到这里的原因:(我知道太长了)

class retailResource(ModelResource):
    client = fields.Field(
        column_name='client',attribute='client',widget=widgets.ForeignKeyWidget(Client,'name')
    )
    country = fields.Field(
        column_name='country',attribute='country',widget=widgets.ForeignKeyWidget(Country,'name')
    )
    catalogue_type = fields.Field(
        column_name='catalogue_type',attribute='catalogue_type',widget=widgets.ForeignKeyWidget(CatalogueType,'name')
    )
    currency_in_report = fields.Field(
        column_name='currency_in_report',attribute='currency_in_report',widget=widgets.ForeignKeyWidget(Currency,'iso3_code')
    )
    start_date = fields.Field(
        attribute='start_date',widget=fields.Field(
            attribute='start_date',column_name='start_date',widget=widgets.DateWidget('%d/%m/%Y'))
    )
    end_date = fields.Field(
        attribute='end_date',widget=widgets.DateWidget('%d/%m/%Y')
    )

    class Meta():
        model = RetailPrice
        fields = ('id','client','country','catalogue_type','quality','gross_retail_price','currency_in_report','reported_as','start_date','end_date','comments',)
        export_order = ['id','comments']
        import_id_fields = ('id',)

管理员就是这样

class retailAdmin(ImportExportModelAdmin):
    resource_class = retailResource
  [...]

解决方法

要覆盖行条目中使用的日期格式,必须使用DateWidget

这是可选的:如果您不使用DateWidget,则逻辑将在幕后仍然使用DateWidget,但是将依赖于您在settings.DATE_INPUT_FORMATS中声明的格式。我希望这就是为什么在删除widget=DateTimeWidget()

时起作用的原因

在查看原始代码时,请注意widget的声明如何具有Field的声明,这显然是错误的。我认为,如果您对此进行了纠正,那就可以了。

    start_date = fields.Field(
        attribute='start_date',widget=fields.Field(
            attribute='start_date',column_name='start_date',widget=widgets.DateWidget('%d/%m/%Y'))
    )
,

所以是的,问题出在日期字段使用widget = widgets.DateWidget。 我删除了资源的那部分,使它像这样。而且有效。 因此,这种方式有效。

font