将参数传递给调度方法

时间:2019-04-16 20:19:04

标签: python django dispatch

  1. 我对Python和Django比较陌生。

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

我发现了一些我希望能起作用的东西,但不幸的是没有

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个现有的数据库记录(它们都有不同的名称):

website.models.MultipleObjectsReturned: get() returned more than one Assay -- 
it returned 3!

1 个答案:

答案 0 :(得分:1)

您要调用的方法带有参数,并将结果存储在dict中,而不是将可调用方法本身字符串化。您应该这样做:

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

即没有括号。

(尽管如果只有一个条目,我不确定这样的分发命令的意义。)

评论后编辑

确实,您有两个称为name的参数,一个是位置参数,另一个在kwarg中。您需要将第一个参数称为永远不会出现在kwarg中的东西,例如dispatch_func_name或其他任何东西。