Django中choice的使用

来自CloudWiki
跳转至: 导航搜索

Django模型中字段属性choice使用

今天设计models时,用到了choice这个属性,用来限制用户做出选择的范围。比如说性别的选择(男或女)。

class User(AbstractUser):
    。。。
    sex = models.CharField(verbose_name='性别',max_length=5,choices=(('male','男'),('female','女')),default='male')

choice接收一个元组(保证值不可变),同理每一个选项也是由一个元组(value,display_name)构成。显而易见,display_name就是要在页面中展示的。

如何取到value和displayname?

比如说实例一个User对象user,则如示user.sex = value,user.get_sex_display() = display_name,通过属性取value,通过 get_属性_display()方法取display_name。

示例:

from django.db import models
 
class Person(models.Model):
    SHIRT_SIZES = (
    ('S', 'Small'),
    ('M', 'Medium'),
    ('L', 'Large'),
    )
    name = models.CharField(max_length=60)
    shirt_size = models.CharField(max_length=1, choices=SHIRT_SIZES) // 和SHIRT_SIZES元组的第一个元素的类型一致

使用方法:

>>> p = Person(name="Fred Flintstone", shirt_size="L")
>>> p.save()
>>> p.shirt_size
'L'
>>> p.get_shirt_size_display()
'Large'

注意如下

STATUS_CHOICE = (
        (1, '处理中'),
        (2, '处理完成'),
        (3, '结束'),
    )

status = models.IntegerField(choices=STATUS_CHOICE) // 和STATUS_CHOICE元组的第一个元素的类型一致

参考文档:https://www.cnblogs.com/robinunix/articles/10904437.html