不将 **kwargs 传递给自定义的 django-import-export 资源 view/form

Not passing **kwargs to django-import-export resources from custom view/form

当我在 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.py

class 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):
        pass

view.py

@login_required
def 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')

很明显,您收到错误是因为在 kwargs 字典中没有包含关键字 'user' 的条目。

如果您查看 source,您可以看到 kwargs 向下传递到调用堆栈中 after_import_instance()

在你的例子中,kwargs 字典中从来没有 user 条目。

但是,如果您将此值传递给 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)