Django模型中字段属性choice的使用

本文深入探讨了Django模型中Choices字段的使用方法,包括如何定义枚举选择、获取value和display name,以及在模板中如何自定义过滤器来显示友好的选项名称。

根据Django官方文档:

 1 from django.db import models
 2 
 3 class Student(models.Model):
 4     FRESHMAN = 'FR'
 5     SOPHOMORE = 'SO'
 6     JUNIOR = 'JR'
 7     SENIOR = 'SR'
 8     YEAR_IN_SCHOOL_CHOICES = (
 9         (FRESHMAN, 'Freshman'),
10         (SOPHOMORE, 'Sophomore'),
11         (JUNIOR, 'Junior'),
12         (SENIOR, 'Senior'),
13     )
14     year_in_school = models.CharField(
15         max_length=2,
16         choices=YEAR_IN_SCHOOL_CHOICES,  # choices中传入YEAR_SCHOOL_CHOICES的元组内容
17         default=FRESHMAN,
18     )
19 
20     def is_upperclass(self):
21         return self.year_in_school in (self.JUNIOR, self.SENIOR)

choices接收一个元组(保证值不可变),每个元组中的第一个元素是要在模型上设置的实际值,第二个元素是人类可读的名称。同理每一个选项也是由一个元组(value,display_name)构成。显而易见,display_name就是要在页面中展示的。

如何取到value和displayname?

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

在模板中可以通过模板语言 {{ user.sex }}很简单地显示value,但不能直接调用 get_属性_display()方法(模板毕竟是模板语言)

只能自定义过滤器,顺便提一句django中是不能直接调用函数的,可以通过自定义filter来实现(template_filters.py)

1 @register.filter(name='displayName')
2 def displayName(value, arg):
3     return eval('value.get_'+arg+'_display()')

模板中使用{{ user|displayName:'sex'}} 就OK(user是传入的变量)。

转载于:https://www.cnblogs.com/cpl9412290130/p/9811813.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值