Django模型中字段属性choice使用说明


Posted in Python onMarch 30, 2020

今天设计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。

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

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

@register.filter(name='displayName')
def displayName(value, arg):
  return eval('value.get_'+arg+'_display()')#eval字符串方法了解一下

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

补充知识:django中choices字段获取对应字段值

如下所示:

class Area(models.Model):
  Area_Level = (
     (0, u'全国'),
     (1, u'省、直辖市'),
     (2, u'市、直辖市区'),
     (3, u'区、县等'),
  )
areaname = models.CharField(max_length=30,unique=True, verbose_name='区域名称')
code = models.CharField(max_length=20,blank=True, default="", verbose_name='区域代码')
parentid = models.IntegerField(verbose_name='父级id', null=True)
level = models.IntegerField(choices=Area_Level,verbose_name='层级', null=True)

object.get_level_display()

以上这篇Django模型中字段属性choice使用说明就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中的并发编程实例
Jul 07 Python
Python简单调用MySQL存储过程并获得返回值的方法
Jul 20 Python
windows 10下安装搭建django1.10.3和Apache2.4的方法
Apr 05 Python
python OpenCV学习笔记之绘制直方图的方法
Feb 08 Python
使用PyCharm创建Django项目及基本配置详解
Oct 24 Python
Python使用字典的嵌套功能详解
Feb 27 Python
python从入门到精通 windows安装python图文教程
May 18 Python
Python使用grequests(gevent+requests)并发发送请求过程解析
Sep 25 Python
python装饰器相当于函数的调用方式
Dec 27 Python
基于python+selenium的二次封装的实现
Jan 06 Python
python继承threading.Thread实现有返回值的子类实例
May 02 Python
python 对象真假值的实例(哪些视为False)
Dec 11 Python
Django+python服务器部署与环境部署教程详解
Mar 30 #Python
Python GUI编程学习笔记之tkinter中messagebox、filedialog控件用法详解
Mar 30 #Python
django自定义非主键自增字段类型详解(auto increment field)
Mar 30 #Python
Python GUI编程学习笔记之tkinter事件绑定操作详解
Mar 30 #Python
VSCode基础使用与VSCode调试python程序入门的图文教程
Mar 30 #Python
Python实现Wordcloud生成词云图的示例
Mar 30 #Python
Django ModelForm操作及验证方式
Mar 30 #Python
You might like
虹吸式咖啡探讨–研磨
2021/03/03 冲泡冲煮
队列在编程中的实际应用(php)
2010/09/04 PHP
LotusPhp笔记之:Cookie组件的使用详解
2013/05/06 PHP
PHP使用ob_start生成html页面的方法
2014/11/07 PHP
PHP实现的一致性哈希算法完整实例
2015/11/14 PHP
PHP结合Mysql数据库实现留言板功能
2016/03/04 PHP
浅谈PHP封装CURL
2019/03/06 PHP
PHP工厂模式的日常使用
2019/03/20 PHP
JS创建优美的页面滑动块效果 - Glider.js
2007/09/27 Javascript
让IE8支持DOM 2(不用框架!)
2009/12/31 Javascript
jquery 问答知识整理
2010/02/11 Javascript
JavaScript setTimeout和setInterval的使用方法 说明
2010/03/25 Javascript
解析John Resig Simple JavaScript Inheritance代码
2012/12/03 Javascript
jquery validate在ie8下的bug解决方法
2013/11/13 Javascript
Javascript中各种trim的实现详细解析
2013/12/10 Javascript
文本域中换行符的替换示例
2014/03/04 Javascript
在JS数组特定索引处指定位置插入元素
2014/07/27 Javascript
js获取鼠标点击的对象,点击另一个按钮删除该对象的实现代码
2016/05/13 Javascript
js 获取当前web应用的上下文路径实现方法
2016/08/19 Javascript
微信小程序自定义可滑动顶部TabBar选项卡实现页面切换功能示例
2019/05/14 Javascript
[02:23]2016国际邀请赛中国区预选赛wings晋级之路
2016/06/29 DOTA
[06:07]DOTA2-DPC中国联赛 正赛 Ehome vs VG 选手采访
2021/03/11 DOTA
Python转换HTML到Text纯文本的方法
2015/01/15 Python
python实现简单温度转换的方法
2015/03/13 Python
详解Python中的各种函数的使用
2015/05/24 Python
Python操作Redis之设置key的过期时间实例代码
2018/01/25 Python
pycharm中成功运行图片的配置教程
2018/10/28 Python
在Python中过滤Windows文件名中的非法字符方法
2019/06/10 Python
python @propert装饰器使用方法原理解析
2019/12/25 Python
pycharm进入时每次都是insert模式的解决方式
2021/02/05 Python
BannerBuzz加拿大:在线定制横幅印刷、广告和标志
2020/03/10 全球购物
法定代表人身份证明书
2014/09/10 职场文书
关于运动会的广播稿50字
2014/10/17 职场文书
高中家长意见怎么写
2015/06/03 职场文书
2015高中教师个人工作总结
2015/07/21 职场文书
《正比例》教学反思
2016/02/23 职场文书