Python Django导入导出-无法导入带有BinaryField的模型
我正在尝试从具有nullablePython Django导入导出-无法导入带有BinaryField的模型,python,django,django-import-export,Python,Django,Django Import Export,我正在尝试从具有nullableBinaryField的模型导入数据。该数据不包含该字段,我希望在该字段中使用空值导入该数据。如果给定id的数据库中已经存在该字段,则该字段应保持原样 我从相应的资源对象中的字段白名单中删除了该字段,并将其添加到排除黑名单中。但是,我在导入时遇到此错误-无法pickle memoryview对象 回溯: Traceback (most recent call last): File "/lib/python3.5/site-packages/import_expo
BinaryField
的模型导入数据。该数据不包含该字段,我希望在该字段中使用空值导入该数据。如果给定id
的数据库中已经存在该字段,则该字段应保持原样
我从相应的资源
对象中的字段
白名单中删除了该字段,并将其添加到排除
黑名单中。但是,我在导入时遇到此错误-无法pickle memoryview对象
回溯:
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导入导出==0.6
编辑:
您是否在
ABCModelForm
中添加了binary_字段
?如果是,则它正在创建问题,因为不可能在ModelForm中包含BinaryField。仅供参考:也许传递实际数组而不是内存视图可以解决您的问题。如果你想并行执行一个函数,如果我没有记错的话,所有的参数都必须是可选择的。至少python多处理就是这样。因此,您可以将数组传递给函数,并在函数中创建memoryview
参考资料:遗憾的是,这似乎是模块的问题 在Python 2.7+和3.5.2+中,允许对
memoryview
对象进行酸洗。请尝试以下代码以确认:
import pickle
test = memoryview(b'abc')
test.__reduce__()
上述操作将引发以下错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/copy_reg.py", line 70, in _reduce_ex
raise TypeError, "can't pickle %s objects" % base.__name__
TypeError: can't pickle memoryview objects
这会导致错误(实例
包含作为内存视图
对象的二进制字段)。在当前版本(1.0.0)中,这种情况在第行发生 由模块的检索/生成的实例不考虑
二进制字段
您可能应该就此打开一张罚单。专有代码,因此添加了它的简化版本…您使用的是什么版本的
django import-export
?django import-export是0.6brain-fart,抱歉@Roshan在最新的0.7版本中会出现这种情况吗?使用django导入导出,甚至试图在应用程序级别转储数据库,确实是对资源、时间和精力的巨大浪费。使用为此定制的工具-这是您的数据库转储工具。不,我在ModelForm的Meta classUm中有exclude=['binary\u field']
,我不会在任何地方传递memoryview。这可能是由django import Export隐式完成的memoryview是在BinaryFields中创建的。to_python方法:链接来自当前头部,但行为已经保持了一段时间。
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/copy_reg.py", line 70, in _reduce_ex
raise TypeError, "can't pickle %s objects" % base.__name__
TypeError: can't pickle memoryview objects
original = deepcopy(instance)