【发布时间】:2012-08-23 08:30:20
【问题描述】:
有没有办法(不使用表单)访问模型字段选择值?
我想做field.choices 之类的操作并在视图或模板中获取值列表。
【问题讨论】:
标签: django django-models
有没有办法(不使用表单)访问模型字段选择值?
我想做field.choices 之类的操作并在视图或模板中获取值列表。
【问题讨论】:
标签: django django-models
当然。只需访问 Model 字段的 choices 属性:
MyModel._meta.get_field('foo').choices
my_instance._meta.get_field('foo').choices
【讨论】:
flatchoices 属性很有用。
如果你这样声明你的选择:
class Topic(models.Model):
PRIMARY = 1
PRIMARY_SECONDARY = 2
TOPIC_LEVEL = ((PRIMARY, 'Primary'),
(PRIMARY_SECONDARY, 'Primary & Secondary'),)
topic_level = models.IntegerField('Topic Level', choices=TOPIC_LEVEL,
default=1)
这是一个真正的好方法。见:http://www.b-list.org/weblog/2007/nov/02/handle-choices-right-way/
然后你可以通过Topic.TOPIC_LEVEL取回选择
【讨论】:
Primary, Primary & Secondary(在上面的例子中应该是这样),我得到了(PRIMARY, 'Primary'), (PRIMARY_SECONDARY, 'Primary & Secondary')。为什么会这样,如何解决?
TOPIC_LEVEL 声明为(database_value, 'readable_value') 对的元组,并且您现在正在完全按照您的输入检索它。这样做有很多好处,其中之一是处理您的代码的下一个人的可读性。这并没有被破坏:许多应用程序宁愿拥有实际的数据库值,而不是人类读取的值。如果您只想要字符串,可以使用[ i[1] for i in Topic.TOPIC_LEVEL ] 检索它们。
我认为您正在寻找get_fieldname_display() 函数。
【讨论】: