您的位置:首页 > Web前端

基于 Django1.10 文档的深入学习(8)—— Model field reference 之 choices

2017-04-26 19:33 507 查看
choices


Field.choices


一个包含两个项目(例如
[(A,B),(A,B)...]
)的可迭代的迭代(例如,列表或元组))用作该字段的选择。 如果给出这一点,默认窗体小部件将是一个带有这些选项而不是标准文本字段的选择框。

每个元组中的第一个元素是要在模型上设置的实际值,第二个元素是可读的名称。 例如:

YEAR_IN_SCHOOL_CHOICES = (
('FR', 'Freshman'),
('SO', 'Sophomore'),
('JR', 'Junior'),
('SR', 'Senior'),
)


通常,最好在模型类中定义选项,并为每个值定义一个适当命名的常量:

from django.db import models

class Student(models.Model):
FRESHMAN = 'FR'
SOPHOMORE = 'SO'
JUNIOR = 'JR'
SENIOR = 'SR'
YEAR_IN_SCHOOL_CHOICES = (
(FRESHMAN, 'Freshman'),
(SOPHOMORE, 'Sophomore'),
(JUNIOR, 'Junior'),
(SENIOR, 'Senior'),
)
year_in_school = models.CharField(
max_length=2,
choices=YEAR_IN_SCHOOL_CHOICES,
default=FRESHMAN,
)

def is_upperclass(self):
return self.year_in_school in (self.JUNIOR, self.SENIOR)


虽然您可以在模型类之外定义选择列表,然后引用它,但是为模型类中的每个选项定义选项和名称将使所有这些信息与使用它的类保持一致,并使选择容易引用( 例如,
Student.SOPHOMORE
将在导入学生模型的任何地方工作)。

对于具有选择集的每个模型字段,
Django
将添加一个方法来检索字段当前值的可读名称。 请参阅数据库API文档中的
get_FOO_display()


请注意,选择可以是任何可迭代对象 - 不一定是列表或元组。 这使您可以动态构建选择。 但是,如果您发现自己的黑客选择是动态的,那么您可能会更好地使用具有
ForeignKey
的正确数据库表。 选择适用于静态数据,如果有的话,这些数据并不会变化很大。

除非
blank= False
与字段一起设置,否则将使用选择框呈现包含“———”的标签。 要覆盖此行为,请在包含None的选项中添加一个元组; 例如 (无,“您的显示字符串”)。 或者,您可以使用空字符串而不是None,这样就有意义 - 例如在CharField上。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐