将参数传递给调度方法

问题描述 投票:0回答:1
  1. 我对Python和Django比较陌生。

我正在解析Excel工作表,并希望将数据存储在数据库(MySQL)中。通过Excel工作表可以获取存储数据表的信息。我想使用调度表来决定存储哪个Object。所需的字段可能有所不同。

我找到了一些我希望可以工作的东西,但不幸的是没有:

python: dispatch method with string input

func_name_dict = {
    'Assay': Assay.objects.get_or_create()
}

def dispatch(name, *args, **kwargs):
    return func_name_dict[name](**kwargs)

dispatch('Assay', name='ChIP-Seq')

我希望新对象将被存储或获取并返回给调用者。

似乎发生的是获取3个现有的DB记录(都具有不同的名称):

website.models.MultipleObjectsReturned: get() returned more than one Assay -- 
it returned 3!
python django dispatch
1个回答
1
投票

您正在调用hi参数的方法并将结果存储在dict中,而不是将可调用方法本身串起来。你应该做:

func_name_dict = {
    'Assay': Assay.objects.get_or_create
}

即没有括号。

(虽然如果你只有一个条目,我不确定这样的发送方式。)

评论后编辑

确实,你有两个名为name的参数,一个作为位置参数,一个作为kwargs。你将需要调用第一个param,这些东西永远不会出现在kwargs中 - 例如,dispatch_func_name,或者其他什么。

© www.soinside.com 2019 - 2024. All rights reserved.