前言

之前一直在想页面上如果一个字段只有固定的几个选项,类似select下拉框这种,如果在表里面设置一个外键的话,是不是有点傻了,这样为了几个选项弄一张表不值得。

后来看到Django模型中的字段有个choices属性,在设计模型的时候,只需把字段参数加个choices即可,看样子是我想多了~

choices参数

如果一个字段设置了choices属性,在模版中如果我要显示这个字段,比如用户的性别,只需设置2个参数选项。

在django模版系统就会将它默认解析为一个下拉菜单,这样对于一个静态的下拉菜单式很方便的。

**gender_choices参数定义一个元祖类型,里面有2个参数,一个是value值可以选择,如“M”,另外一个是显示的内容display_name,如“男”

# models.py
from django.db import models # Create your models here. class Student(models.Model):
'''学生表'''
student_id = models.CharField(max_length=30, verbose_name="学号", default="")
name = models.CharField(max_length=30, verbose_name="姓名", default="")
gender_choices = (
(u'M', u'男'),
(u'F', u'女'),
)
gender = models.CharField(max_length=10,
choices=gender_choices, # 设置性别选项
verbose_name="性别",
default="") age = models.IntegerField(verbose_name="年龄", default="") class Meta:
verbose_name = "学生"
verbose_name_plural = verbose_name def __str__(self):
return self.name

之后执行 makemigrations 和migrate,同步数据

python manage.py makemigrations

python manage.py migrate

添加和查询数据

进入到django的项目目录,使用shell模式添加数据,choices字段可以直接添加value参数“M”

>python manage.py shell

>>> from hello.models import Student
>>> st=Student.objects.create(student_id='22001100',name='赵敏',gender='F',age=22)
>>> st.save() >>> st.gender
'F'
>>> st.get_gender_display()
'女'
>>>

gender字段中保存了两个信息,一个为value,一个display_name,取value时直接用st.gender即可,如果要取display_name用st.get_gender_display()这个函数即可。

xadmin展示

在xadmin.py注册表信息,打开后台详情页面就可以看到下拉选项了

# adminx.py
import xadmin
from .models import Student class DisplayStudent(object):
# 显示的字段
list_display = ('student_id', 'name', 'age',) xadmin.site.register(Student, DisplayStudent)

python测试开发django-40.模型(model)中choices使用的更多相关文章

  1. Django之模型(model)中的choices字段的使用

    转载自:http://quke.org/post/django-model-choices.html Django模型中的字段有个choices属性,这个属性可以提供被选数据,choices的参数是一 ...

  2. python测试开发django-53.xadmin里Model分类管理(proxy=True)

    前言 django的xadmin后台使用xadmin.site.register注册时,一张表只能注册一次,在后面页面上只能显示出一个页面. 有时候我们想从里面筛选出自己想要的数据,比如有全部的学生成 ...

  3. python测试开发django-15.查询结果转json(serializers)

    前言 django查询数据库返回的是可迭代的queryset序列,如果不太习惯这种数据的话,可以用serializers方法转成json数据,更直观 返回json数据,需要用到JsonResponse ...

  4. python测试开发django-rest-framework-63.基于函数的视图(@api_view())

    前言 上一篇讲了基于类的视图,在REST framework中,你也可以使用常规的基于函数的视图.它提供了一组简单的装饰器,用来包装你的视图函数, 以确保视图函数会收到Request(而不是Djang ...

  5. python测试开发django-197.django-celery-beat 定时任务

    前言 django-celery-beat 可以支持定时任务,把定时任务写到数据库. 接着前面这篇写python测试开发django-196.python3.8+django2+celery5.2.7 ...

  6. Python自动化开发 - Django【基础篇】

    Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为: 大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能 ...

  7. python测试开发django-36.一对一(OneToOneField)关系查询

    前言 前面一篇在xadmin后台一个页面显示2个关联表(OneToOneField)的字段,使用inlines内联显示.本篇继续学习一对一(OneToOneField)关系的查询. 上一篇list_d ...

  8. python测试开发django-16.JsonResponse返回中文编码问题

    前言 django查询到的结果,用JsonResponse返回在页面上显示类似于\u4e2d\u6587 ,注意这个不叫乱码,这个是unicode编码,python3默认返回的编码 遇到问题 接着前面 ...

  9. 《Python测试开发技术栈—巴哥职场进化记》—前言

    写在前面 今年从4月份开始写一本讲Python测试开发技术栈的书,主要有两个目的,第一是将自己掌握的一些内容分享给大家,第二是希望自己能系统的梳理和学习Python相关的技术栈.当时我本来打算以故事体 ...

随机推荐

  1. Android实现手机摄像头的自动对焦

    如何实现Android相机的自动对焦,而且是连续自动对焦的.当然直接调用系统相机就不用说了,那个很简单的.下面我们主要来看看如如何自己实现一个相机,并且实现自动连续对焦. 代码如下: public c ...

  2. python基础类型 —— Sets集合

    集合(set)是一个无序不重复元素的序列. 基本功能是进行成员关系测试和删除重复元素. 运行结果如下: sets其他操作: myset.add('x') # 添加一项 myset.update([10 ...

  3. Caffe学习系列(17): blob

    对于blob.h文件. 先看成员变量.定义了6个保护的成员变量,包括前.后向传播的数据,新.旧形状数据(?), 数据个数及容量. 再看成员函数.包括构造函数(4个参数),reshape(改变blob形 ...

  4. pyhton之os.path

    目录结构 file __file__表示了当前文件的path 以相对路径运行:python 1.py 结果:1.py 以绝对路径运行:python F:\python-study\test\1.py ...

  5. finall和set和构造方法的参数意义

    package demo04; /* * 形状 */public abstract class Shape { // 求周长 public abstract double getGrith(); // ...

  6. 配置kotlin自带的编译器,并使用kotlinc、kotlin命令

    Kotlin是一种静态类型的编程语言,可在Java虚拟机上运行,也可以编译为JavaScript源代码. 其主要发展来自位于俄罗斯圣彼得堡的JetBrains程序员团队. 虽然语法与Java不兼容,但 ...

  7. PYTHON 写入list并换行的方法

    f.writelines(lists) 是不换行的写入,可用以下方法在写入时换行. 方法一: for line in lists: f.write(line+'\n') 方法二: lists=[lin ...

  8. 【Java】 大话数据结构(12) 查找算法(3) (平衡二叉树(AVL树))

    本文根据<大话数据结构>一书及网络资料,实现了Java版的平衡二叉树(AVL树). 平衡二叉树介绍 在上篇博客中所实现的二叉排序树(二叉搜索树),其查找性能取决于二叉排序树的形状,当二叉排 ...

  9. java实现最小堆

    1.堆:通常通过二叉堆,实为二叉树的一种,分为最小堆和最大堆,具有以下性质: 任意节点小于它的所有后裔,最小元在堆的根上. 堆总是一棵完全树 将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小 ...

  10. 015.Zabbix的日志监控配置

    一 日志监控概述 Zabbix可用于集中监控和分析日志,支持有日志轮询的日志监控分析.当日志中出现相关警告信息(如警告.报错等),可以发送通知给用户.日志监控功能,必须满足以下两个条件: Zabbix ...