Django模型中字段属性choice的使用
根据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是传入的变量)。
学三境:
一境:昨夜西风凋碧树,独上高楼,望尽天涯路;
二境:衣带渐宽终不悔,为伊消得人憔悴;
三境:众里寻‘它’千百度,蓦然回首,那斯却在,灯火阑珊处。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY