【发布时间】:2021-03-11 19:08:33
【问题描述】:
我正在构建一个工具,允许用户使用django-import-export 工具上传 CSV 文件以更新数据库。我上传了包含一个数据行的测试 CSV 文件,然后再次上传并得到了一个重复的行(具有新的主键,但所有其他值都相同)。 row.import_type 值是“更新的”,但唯一更新的是 id。
然后我第三次上传同一个文件,得到一个错误:
app.models.Role.MultipleObjectsReturned: get() returned more than one Role -- it returned 2!
(顺便说一句,我非常感谢该错误消息中的感叹号。)
理想情况下,我会在文件的第二次导入和第三次导入时跳过一行。我想我会接受一个错误。文件内容为:
Sales Role,System Role,System Plan,id
Sales Rep,Account Executive,951M-NA,
这是用户在导出 csv 数据集时获得的格式。理想情况下,他们会导出一个文件,更改几列(除了 import_id_field 的名称),然后重新上传数据。
在 app/resources.py 中:
class RoleResourec(resources.ModelResource):
name = Field(attribute='name', column_name="Sales Role")
default_role = Field(attribute='default_role', column_name="System Role")
default_plan = Field(attribute='default_plan', column_name="System Plan")
class Meta:
models=Role
fields= ('id', 'name', 'default_role', 'default_plan')
import_id_fields = ('name',)
skip_unchanged = True
据我所知,在第二次导入时,get_or_init_instance() 方法没有从第一次导入中找到对象,但在第三次导入时确实找到了它们。如Import data workflow 页面中所述,我没有对资源进行任何自定义导入工作流。
这里出了什么问题?我是否需要自定义导入工作流,还是我错过了资源中的另一个必需属性?
【问题讨论】:
标签: django django-import-export