基于 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上。
相关文章推荐
- 基于 Django1.10 文档的深入学习(16)——Authentication backends 之 class ModelBackend
- 基于 Django1.10 文档的深入学习(23)—— QuerySet API reference 之 icontains
- 基于 Django1.10 文档的深入学习(3)—— models.py 之 FileField
- 基于 Django1.10 文档的深入学习(24)—— Form and field validation 之 cleaned_data
- 基于 Django1.10 文档的深入学习(27)—— django.conf.urls utility functions 之 url(),include(),static()
- 基于 Django1.10 文档的深入学习(2)—— Settings.py 之 STATIC_*
- 基于 Django1.10 文档的深入学习(11)—— django.shortcuts 之 render()
- 基于 Django1.10 文档的深入学习(20)—— Using the Django authentication system 之 login()
- 基于 Django1.10 文档的深入学习(7)—— Configuring applications
- 基于 Django1.10 文档的深入学习(13)—— Making queries 之 Q objects
- 基于 Django1.10 文档的深入学习(1)—— Settings.py 之 MEDIA_ROOT 与 MEDIA_URL
- 基于 Django1.10 文档的深入学习(26)—— Creating forms from models 之 基础
- 基于 Django1.10 文档的深入学习(12)—— django.shortcuts 之 redirect()
- 基于 Django1.10 文档的深入学习(4)—— models.py 之 class Meta
- 基于 Django1.10 文档的深入学习(9)—— Extra instance methods 之 get_FOO_display()
- 基于 Django1.10 文档的深入学习(25)—— Applications 之 基础部分
- 基于 Django1.10 文档的深入学习(21)——The Forms API 之 Form.errors
- 基于 Django1.10 文档的深入学习(17)——Customizing authentication 之 Custom users and permissions
- 基于 Django1.10 文档的深入学习(22)——Sending email 之 send_mail()
- 基于 Django1.10 文档的深入学习(18)—— Using the Django authentication system 之 LoginRequiredMixin