我正在尝试编写一个插件,它将某个选择类型的自定义字段添加到票证中。与选择类型的常规自定义字段的区别在于,该字段将从数据库中获取其值并使用 optgroups 创建一个选择。
我通过 trac 配置文件创建一个自定义选择字段并使用 Transformer 修改它
代码如下:
db = self.env.get_db_cnx()
cursor = db.cursor()
cursor.execute("SELECT name, a_id FROM a_group")
groups = cursor.fetchall()
cursor.execute("SELECT id, name FROM activities")
activities = cursor.fetchall()
for activity in activities:
stream = stream | Transformer('.//select[@id="field-activity"]').append(tag.optgroup(label=activity[1], id="act-"+str(activity[0])))
for group in groups:
if int(group[1]) == activity[0]:
stream = stream | Transformer('.//optgroup[@id="act-' + str(activity[0]) + '"]').append(tag.option(group[0]))
问题是:当我尝试保存新票时,出现错误:
Warning: <field_name_goes_here> is not a valid value for the activity field.
这是因为,当我通过 trac 自定义字段功能使用自定义字段时 - 我没有通过 trac 配置文件提供任何选项。
问题是 - 实现这种功能的最佳(如果有的话)方法是什么?