【发布时间】:2017-12-19 09:56:24
【问题描述】:
我正在尝试从具有可为空的BinaryField 的模型导入数据。数据不包含该字段,我希望在该字段中使用空值导入它。如果给定id 的数据库中已经存在该字段,则它应该保持原来的值。
我从对应Resource对象的fields白名单中删除了该字段,并将其添加到exclude黑名单中。但是,我在导入时遇到此错误 - can't pickle memoryview objects。
追溯:
Traceback (most recent call last):
File "/lib/python3.5/site-packages/import_export/resources.py", line 451, in import_row
original = deepcopy(instance)
File "/lib/python3.5/copy.py", line 182, in deepcopy
y = _reconstruct(x, rv, 1, memo)
File "/lib/python3.5/copy.py", line 297, in _reconstruct
state = deepcopy(state, memo)
File "/lib/python3.5/copy.py", line 155, in deepcopy
y = copier(x, memo)
File "/lib/python3.5/copy.py", line 243, in _deepcopy_dict
y[deepcopy(key, memo)] = deepcopy(value, memo)
File "/lib/python3.5/copy.py", line 174, in deepcopy
rv = reductor(4)
TypeError: can't pickle memoryview objects
软件包版本 - django==1.11、django-import-export==0.6
编辑:
class ABC(models.Model):
name = models.CharField('Name', max_length=128, blank=False, null=False)
binary_field = models.BinaryField('Some name', null=True, blank=True)
class ABCResource(resources.ModelResource):
class Meta:
model = ABC
fields = (
'id',
'name',
)
import_id_fields = ('id',)
exclude = ('binary_field',)
class ABCAdmin(ImportExportModelAdmin):
form = ABCModelForm
list_display = (
'id',
'name',
)
exclude = ('binary_field',)
resource_class = ABCResource
class ABCModelForm(forms.ModelForm):
class Meta:
model = ABC
exclude = ['binary_field']
【问题讨论】:
-
专有代码,所以添加了它的简化版本...
-
你使用的是什么版本的
django-import-export? -
django-import-export 是 0.6
-
脑子放屁,对不起。 @Roshan 最新的 0.7 版本会出现这种情况吗?
-
使用 django import export 甚至尝试在应用程序级别转储数据库确实是对资源、时间和精力的巨大浪费。使用为此定制的工具 - 这是您的数据库转储工具。
标签: python django django-import-export