管理与 Python 函数对应的 Django UI 选择的最可扩展的方法是什么?



我正在尝试创建一个静态的函数共享列表及其描述以显示在DjangoformMultipleChoiceField中。

我希望这是可扩展的,以防我以后添加更多文件选项,但我不想在多个地方更改代码,除了编写新函数并将其添加到我的 tasks.py文件中的CHOICES列表中。

我似乎无法从类外的CHOICES列表中引用函数(abc(。我已经尝试TaskClass.a列表中的,但不断收到错误:

Unresolved reference 'a'

最好的方法是什么?

tasks.py

CHOICES = [
('This is function A.', a),
('This is function B.', b),
('This is function C.', c)
]
class TaskClass():
def a(self):
...
def b(self):
...
def c(self):
...

form.py

from tasks import CHOICES
class MyForm(forms.Form):
function_choices = []
# Convert function choices to list format needed for MultipleChoiceField
for i, tuple in enumerate(CHOICES):
function_choices.append((i+1, tuple[0]))
forms.MultipleChoiceField(
choices=function_choices,
widget=forms.CheckboxSelectMultiple,
label='Functions to Call:'
)

在字符串值和函数名称之间添加映射层:

CHOICES = [
('a', 'This is function A.'),
('b', 'This is function B.'),
('c', 'This is function C.'),
]
class TaskClass(object):
def __init__(self):
self.task_map = {
'a': self.a,
'b': self.b,
'c': self.c
}
def a(self):
...
def b(self):
...
def c(self):
...

然后,您可以通过调用以下命令运行相应的函数:

tc = TaskClass()
tc.task_map['a']()

相关内容

  • 没有找到相关文章

最新更新