猿问

不将 **kwargs 从自定义视图/表单传递到 django-import-export 资源

当我在 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')


长风秋雁
浏览 107回答 1
1回答

宝慕林4294392

显然,您收到错误是因为 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)
随时随地看视频慕课网APP

相关分类

Python
我要回答