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

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上。

这里写图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值