当我在 Django 管理中使用这个 resources.py 时,一切正常。但是,当我在我的自定义视图页面上执行此操作时,**kwargs 用户自动填充出现了一个问题。错误一定是在我看来,因为它没有通过 **kwargs,但我不确定如何解决它。我应该在哪里传递这些信息?KeyError at /import/'user'C:\Users\winkl\tj3\venv\lib\site-packages\import_export\resources.py in import_row self.after_import_instance(instance, new, **kwargs) …C:\Users\winkl\tj3\portfolios\resources.py in after_import_instance instance.created_by = kwargs['user'] resources.pyclass EntryResource(resources.ModelResource): symbol = fields.Field( attribute="symbol", column_name="symbol", widget=SymbolWidget(Symbol, 'name'), ) date = fields.Field( attribute="date", column_name="date", widget=widgets.DateTimeWidget(format="%Y-%m-%d %H:%M:%S"), ) class Meta: model = Entry fields = ('symbol', 'date', 'id', 'amount', 'price', 'fee', 'entry_type', 'reg_fee',) import_order = fields skip_unchanged = False report_skipped = True def after_import_instance(self, instance, new, row_number=None, **kwargs): print(f' Kwargs: {kwargs}') instance.created_by = kwargs['user'] def after_save_instance(self, instance, using_transactions, dry_run): passview.py@login_requireddef import_data(request): if request.method == 'POST': trade_resource = EntryResource() dataset = Dataset() new_trades = request.FILES['importData'] imported_data = dataset.load(new_trades.read().decode('utf-8'),format='csv') result = trade_resource.import_data(dataset, dry_run=True, raise_errors=True) if result.has_errors(): messages.error(request, 'Uh oh! Something went wrong...') else: # Import now trade_resource.import_data(dataset, dry_run=False) messages.success(request, 'Your words were successfully imported') return render(request, 'dashboard/import.html')
1 回答
宝慕林4294392
TA贡献2021条经验 获得超8个赞
显然,您收到错误是因为 kwargs 字典中没有包含键“用户”的条目。
如果查看源代码,您会看到 getkwargs
向下传递到调用堆栈中after_import_instance()
。
user
在您的情况下, kwargs 字典中从来没有任何条目。
但是,如果您将此值传递给调用import_data()
,则可以检索和使用它:
your_user = load_user() # implement this as required result = trade_resource.import_data(dataset, dry_run=True, raise_errors=True, user=your_user)
添加回答
举报
0/150
提交
取消