尝试让Django中的枚举样式选择正常工作,但整个元组出现在下拉框中

1 投票
1 回答
1209 浏览
提问于 2025-04-15 11:10

我正在使用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类里有一个示例。)

撰写回答