choices参数
一:choices参数
1.choices参数作用
1.针对某个可以列举完全的可能性字段,我们应该如何存储
2.只要某个字段的可能性是可以列举完全的,那么一般情况下都会采用choices参数
2.列举:
用户表:
性别
学历
工作经验
是否结婚
是否生子
客户来源
3.choices效果
1.该gender字段存的还是数字 但是如果存的数字在上面元组列举的范围之内
2.那么可以非常轻松的获取到数字对应的真正的内容
二:choices使用
- models.py
from django.db import models
class User(models.Model):
username = models.CharField(max_length=32)
age = models.IntegerField()
# 性别 (对应关系)
gender_choices = (
(1, '男'),
(2, '女'),
(3, '其他'),
) # 参数choices=gender_choices
gender = models.IntegerField(choices=gender_choices)
# 执行迁移命令与同步
1.创建字段类型
1.字段存什么,根据gender_choices内元组的第一个元素,
2.元素如果是数字就放一个数字类型的字段
3.元素如果是字符串就放一个字符串类型的字段
2.验证choices
- 1.验证gender字段存的数字不在上述元组列举的范围内容
- 2.验证 如果在 如何获取对应的中文及信息
3.使用测试脚本
4.将manage.py文件内的前四行代码复制到tests文件中
- tests.py
import os
import sys
if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "choices参数.settings")
5.使用测试脚本开始验证
- tests.py
import os
import sys
if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "day78.settings")
# 测试脚本导入模块
import django
django.setup()
# 导入models
from app01 import models
# 创建用户信息
# 1.验证 1-3都在列举的范围内 4不在列举的范围内
models.User.objects.create(username='jason', age=18, gender=1)
models.User.objects.create(username='egon', age=85, gender=2)
models.User.objects.create(username='tank', age=40, gender=3)
# 存储的时候 没有列举的数字也可以存 (范围还是按照字段类型决定)
models.User.objects.create(username='tony', age=45, gender=4)
6.choices参数内错误取值方式
user_obj = models.User.objects.filter(pk=1).first()
print(user_obj.gender)
7.choices正确取值方式
1.只要是choices参数的字段 如果你想要获取对应信息
固定写法:
get_字段名_display()
user_obj = models.User.objects.filter(pk=1).first()
print(user_obj.get_gender_display())
8.验证 choices取值没有对应关系的
user_obj = models.User.objects.filter(pk=1).first()
print(user_obj.get_gender_display())
如果没有对应关系 那么字段是什么就展示什么 不会报错
9.元组第一个元素为字符串情况
保证字段类型跟列举出来的元组第一个数据一直即可
# models.py
class User(models.Model):
username = models.CharField(max_length=32)
age = models.IntegerField()
score_choices = (
('A', '优秀'),
('B', '良好'),
('C', '及格'),
('D', '不及格'),
)
# 1.保证字段类型跟列举出来的元组第一个数据一直即可
score = models.CharField(choices=score_choices, null=True)
# tests.py
# 创建用户信息
# 1.验证 1-3都在列举的范围内 4不在列举的范围内
models.User.objects.create(username='jason', age=18, gender=1)
models.User.objects.create(username='egon', age=85, gender=2)
models.User.objects.create(username='tank', age=40, gender=3)
# # 存储的时候 没有列举的数字也可以存 (范围还是按照字段类型决定)
models.User.objects.create(username='tony', age=45, gender=4)
# 2.取值方式 固定写法 get_字段名_display()
user_obj = models.User.objects.filter(pk=1).first()
print(user_obj.get_score_display())
choices参数的更多相关文章
- ORM优化查询、choices参数
目录 ORM查询优化 only与defer select_related和prefetch_related MTV与MVC模型 choices参数 ORM查询优化 only与defer res = m ...
- F与Q查询 事务 choices参数
F与Q查询 F查询 当我们需要将两个字段对应的数据进行比较时就需要用到F查询. select * from book where sold > stock 1.例如需要将售出部分数据和库存数据进 ...
- ORM中choices参数(重要)、MTV于MVC模型、多对多关系三种创建方式
choices参数(重要) **使用方式
- models中,对于(Small)IntegerField类型字段的choices参数在前端的展示
# models.py class UserInfo(models.Model): gender_choices = ( (1, "男"), (2, "女"), ...
- 使用choices参数的实际项目表设计
# 实际项目表设计 from django.db import models # Create your models here. # rbac权限相关表格 class User(models.Mod ...
- Python解析命令行读取参数 -- argparse模块
在多个文件或者不同语言协同的项目中,python脚本经常需要从命令行直接读取参数.万能的python就自带了argprase包使得这一工作变得简单而规范.PS:optparse包是类似的功能,只不过写 ...
- argparse - 命令行选项与参数解析(转)
argparse - 命令行选项与参数解析(译)Mar 30, 2013 原文:argparse – Command line option and argument parsing 译者:young ...
- python命令行参数解析模块argparse和docopt
http://blog.csdn.net/pipisorry/article/details/53046471 还有其他两个模块实现这一功能,getopt(等同于C语言中的getopt())和弃用的o ...
- python 命令行参数——argparse模块的使用
以下内容主要来自:http://wiki.jikexueyuan.com/project/explore-python/Standard-Modules/argparse.html argparse ...
- python之定义参数模块argparse(一)基本使用
在shell脚本中,若脚本带参数,则在脚本中使用$1.$2...等引用, 在python中,也可以定义类似的引用参数,可以为必选项也可以可选项. 基本用法如下三种: 1.必选项(位置参数) impor ...
随机推荐
- 监控elasticsearch
转载自:https://cloud.tencent.com/developer/article/1655489 注意:上半截跟下半截是采用的不同的方式,建议采用下半截的方式,上半截的方式据说获取不到数 ...
- MySQL学习(1)---MySQL概述
什么是数据库 概述 数据库(Database)是长期存储在计算机内有组织.大量.共享的数据集合.它可以供各种用户共享,具有最小冗余度和较高的数据独立性.数据库管理系统DBMS(Database Man ...
- PAT (Basic Level) Practice 1008 数组元素循环右移问题 分数 20
一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A0A1⋯AN−1)变换为(AN−M⋯AN−1A0A1⋯AN ...
- ERP是什么呢?
ERP(Enterprise Resource Planning,企业资源计划)系统,是进行物质资源.资金资源和信息资源集成一体化管理的企业信息管理系统,ERP统领企业全局,为管理层服务,重心在于企业 ...
- Bug改不完,迭代总延期,咋办?
摘要:本文从流程上需要改进的地方进行讨论,分四个方面来分析产生这个问题的原因. 本文分享自华为云社区<Bug改不完,迭代总延期,咋办?>,作者: 华为云PaaS服务小智. 前言 随着互联网 ...
- 云的安全组和网络ACL
云的安全组和网络ACL 1.流量控制: 安全组是云服务器.数据库等实例级别的流量控制 ACL是子网级别的流量控制 2.规则: 安全组和网络ACL都支持允许规则和拒绝规则 3.状态: 安全组有状态( ...
- instanceof的使用和向下转型
x instanceof A:检验x是否为类A的对象,返回值为boolean型 使用情境:为了避免在向下转型时出现ClassCastException的异常,我们在向下转型之前,先进行instance ...
- Typora设置代码块Mac风格三个圆点
写作不停,美化不止! mac小圆点效果 原本代码块样式就挺....干净的,光秃秃的,太单调了: 是吧很丑,于是自己发挥改成了这样: 好吧还是太单调,也没好看到哪里去,于是隔了两天又重新改,DuangD ...
- 后端框架学习-----mybatis(4)
文章目录 4.解决属性名和字段名不一致的问题 4.解决属性名和字段名不一致的问题 1.问题.数据库字段名和属性名不一致,导致查出的数据部分为空 2.resultMap(用于解决数据库表中的字段和属性) ...
- TCP 序列号和确认号是如何变化的?
大家好,我是小林. 在网站上回答了很多人的问题,我发现很多人对 TCP 序列号和确认号的变化都是懵懵懂懂的,只知道三次握手和四次挥手过程中,ACK 报文中确认号要 +1,然后数据传输中 TCP 序列号 ...