问题描述
我不知道问题出在哪里,问题出在哪里。我能够通过 django import export 上传文件,但现在我无法这样做。这是我的追溯。
Traceback (most recent call last):
File "C:\Users\FR GULIK\AppData\Local\Programs\Python\python38-32\lib\site-packages\django\core\handlers\exception.py",line 47,in inner
response = get_response(request)
File "C:\Users\FR GULIK\AppData\Local\Programs\Python\python38-32\lib\site-packages\django\core\handlers\base.py",line 181,in _get_response
response = wrapped_callback(request,*callback_args,**callback_kwargs)
File "C:\Users\FR GULIK\AppData\Local\Programs\Python\python38-32\lib\site-packages\django\views\generic\base.py",line 70,in view
return self.dispatch(request,*args,**kwargs)
File "C:\Users\FR GULIK\AppData\Local\Programs\Python\python38-32\lib\site-packages\django\contrib\auth\mixins.py",line 52,in dispatch
return super().dispatch(request,**kwargs)
File "C:\Users\FR GULIK\AppData\Local\Programs\Python\python38-32\lib\site-packages\django\views\generic\base.py",line 98,in dispatch
return handler(request,**kwargs)
File "D:\Python\Django\test projects\library manage\lib_system\Library-System\libman\import_export_views.py",line 227,in post
result = resource.import_data(data_set,dry_run=True,collect_Failed_rows=True,raise_errors=True)
File "C:\Users\FR GULIK\AppData\Local\Programs\Python\python38-32\lib\site-packages\import_export\resources.py",line 741,in import_data
return self.import_data_inner(dataset,dry_run,raise_errors,using_transactions,collect_Failed_rows,**kwargs)
File "C:\Users\FR GULIK\AppData\Local\Programs\Python\python38-32\lib\site-packages\import_export\resources.py",line 788,in import_data_inner
raise row_result.errors[-1].error
File "C:\Users\FR GULIK\AppData\Local\Programs\Python\python38-32\lib\site-packages\import_export\resources.py",line 635,in import_row
instance,new = self.get_or_init_instance(instance_loader,row)
File "C:\Users\FR GULIK\AppData\Local\Programs\Python\python38-32\lib\site-packages\import_export\resources.py",line 330,in get_or_init_instance
instance = self.get_instance(instance_loader,line 323,in get_instance
return instance_loader.get_instance(row)
File "C:\Users\FR GULIK\AppData\Local\Programs\Python\python38-32\lib\site-packages\import_export\instance_loaders.py",line 31,in get_instance
return self.get_queryset().get(**params)
TypeError: get() keywords must be strings
这是资源文件
class ImportBooksResource(resources.ModelResource):
def __init__(self,school_id,**kwargs):
super(ImportBooksResource,self).__init__()
self.school_id = school_id
self.fields["id"] = fields.Field(widget=ForeignKeyWidget(Books,'id'))
self.fields['department'] = fields.Field(widget=ForeignKeyWidget(Departments,'name'))
def before_save_instance(self,instance,dry_run):
instance.school_id = self.school_id
def before_import_row(self,row,**kwargs):
row['department'] = row['department'].lower()
class Meta:
model = Books
fields = ('reg_no','book_name','book_detail','department')
import_id_fields = ('id',)
import_order = ('reg_no','department')
解决方法
这一行看起来不对:
self.fields["id"] = fields.Field(widget=ForeignKeyWidget(Books,'id'))
删除这一行,它应该可以工作了。
原因:您在 ModelResource 子类上为 Books
声明一个字段,这表明 Books
存在 FK 关系。从 Books
到 Books
不应存在 FK 关系。您不需要声明 id
字段,因为您使用的是 ModelResource
,因此该字段应该是隐式可用的。