将参数传递给调度方法
Passing arguments to dispatch methods
- 我对 Python 和 Django 比较陌生。
我正在解析 Excel sheets 并想将数据存储在数据库中 (MySQL)。 table 存储数据的信息可通过 Excel sheet 获得。我想使用调度 table 来决定存储哪个对象。所需的字段可能会有所不同。
我找到了一些我希望有用的东西,但不幸的是没有:
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!
您正在调用 hi 参数的方法并将结果存储在字典中,而不是字符串化可调用方法本身。你应该这样做:
func_name_dict = {
'Assay': Assay.objects.get_or_create
}
即没有括号。
(虽然我不确定如果你只有一个条目,像这样的 dispatch dict 有什么意义。)
评论后编辑
的确,您有两个参数 name
,一个作为位置参数,一个在 kwargs 中。您需要将第一个参数称为永远不会出现在 kwargs 中的东西 - 例如,dispatch_func_name
,或其他任何东西。
- 我对 Python 和 Django 比较陌生。
我正在解析 Excel sheets 并想将数据存储在数据库中 (MySQL)。 table 存储数据的信息可通过 Excel sheet 获得。我想使用调度 table 来决定存储哪个对象。所需的字段可能会有所不同。
我找到了一些我希望有用的东西,但不幸的是没有:
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!
您正在调用 hi 参数的方法并将结果存储在字典中,而不是字符串化可调用方法本身。你应该这样做:
func_name_dict = {
'Assay': Assay.objects.get_or_create
}
即没有括号。
(虽然我不确定如果你只有一个条目,像这样的 dispatch dict 有什么意义。)
评论后编辑
的确,您有两个参数 name
,一个作为位置参数,一个在 kwargs 中。您需要将第一个参数称为永远不会出现在 kwargs 中的东西 - 例如,dispatch_func_name
,或其他任何东西。