尝试让Django中的枚举样式选择正常工作,但整个元组出现在下拉框中
我正在使用appengine和appenginepatch(所以我的问题可能和这个有关)
我设置了一个模型,里面有一个属性可以选择多个选项,但当我试图在表单或管理界面上显示时,出现了一个错误:
属性模式是'o';必须是以下选项之一(('s', '单个'), ('m', '多个'), ('o', '有序'))
这是我的代码:
MODES = (
('s', 'Single'),
('m', 'Multi'),
('o', 'Ordered')
)
class X(search.SearchableModel):
mode = models.StringProperty( default='s', choices=MODES )
如果我把它设置为使用整数(如下所示),那么管理表单(以及我自己的ModelForm)会把每个选项都显示为整个元组,这样当我选择并尝试保存时,就会出现错误,提示我没有保存一个整数值
MODES = (
(0, 'Single'),
(1, 'Multi'),
(2, 'Ordered')
)
class X(search.SearchableModel):
mode = models.IntegerProperty( default=0, choices=MODES )
我需要做些什么特别的事情吗?
1 个回答
2
看起来这是Django和appengine支持之间的一个问题。在google-app-engine-django的错误追踪器上有相关记录,链接在这里,但那里的状态是“不会修复”。在googleappengine的错误追踪器上也有记录,链接在这里,但被标记为无效。
根据文档,appengine的choices
参数和Django的用法不一样。看起来你想要的功能,如果不创建一个自定义的控件,是无法实现的。根据Guido在关闭googleappengine问题时的评论,
我意识到这可能会在你尝试从模型创建表单时造成问题,但解决办法是使用自定义控件来覆盖表单字段,并将你想要的选项列表传递给这个控件。(在Rietveld的codereview/views.py文件中的SettingForm类里有一个示例。)