微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

get() 关键字必须是字符串

如何解决get() 关键字必须是字符串

我不知道问题出在哪里,问题出在哪里。我能够通过 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 关系。从 BooksBooks 不应存在 FK 关系。您不需要声明 id 字段,因为您使用的是 ModelResource,因此该字段应该是隐式可用的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。