一: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参数的更多相关文章

  1. ORM优化查询、choices参数

    目录 ORM查询优化 only与defer select_related和prefetch_related MTV与MVC模型 choices参数 ORM查询优化 only与defer res = m ...

  2. F与Q查询 事务 choices参数

    F与Q查询 F查询 当我们需要将两个字段对应的数据进行比较时就需要用到F查询. select * from book where sold > stock 1.例如需要将售出部分数据和库存数据进 ...

  3. ORM中choices参数(重要)、MTV于MVC模型、多对多关系三种创建方式

    choices参数(重要) **使用方式

  4. models中,对于(Small)IntegerField类型字段的choices参数在前端的展示

    # models.py class UserInfo(models.Model): gender_choices = ( (1, "男"), (2, "女"), ...

  5. 使用choices参数的实际项目表设计

    # 实际项目表设计 from django.db import models # Create your models here. # rbac权限相关表格 class User(models.Mod ...

  6. Python解析命令行读取参数 -- argparse模块

    在多个文件或者不同语言协同的项目中,python脚本经常需要从命令行直接读取参数.万能的python就自带了argprase包使得这一工作变得简单而规范.PS:optparse包是类似的功能,只不过写 ...

  7. argparse - 命令行选项与参数解析(转)

    argparse - 命令行选项与参数解析(译)Mar 30, 2013 原文:argparse – Command line option and argument parsing 译者:young ...

  8. python命令行参数解析模块argparse和docopt

    http://blog.csdn.net/pipisorry/article/details/53046471 还有其他两个模块实现这一功能,getopt(等同于C语言中的getopt())和弃用的o ...

  9. python 命令行参数——argparse模块的使用

    以下内容主要来自:http://wiki.jikexueyuan.com/project/explore-python/Standard-Modules/argparse.html argparse ...

  10. python之定义参数模块argparse(一)基本使用

    在shell脚本中,若脚本带参数,则在脚本中使用$1.$2...等引用, 在python中,也可以定义类似的引用参数,可以为必选项也可以可选项. 基本用法如下三种: 1.必选项(位置参数) impor ...

随机推荐

  1. Fluentd部署:错误排查

    介绍一下排查Fluentd运行时错误的几种方法. 查看日志 如果感觉Fluentd运行异常,请先查看日志.td-agent安装后,默认日志存放在/var/log/td-agent/td-agent.l ...

  2. 10. Fluentd部署:高可用配置

    对于高访问量的web站点或者服务,可以采用Fluentd的高可用配置模式. 消息分发语义 Fluentd设计初衷主要是用作事件日志分发系统的.这类系统支持几种不同的分发模式: 至多一次.消息被立即发送 ...

  3. Fluentd部署:如何监控Fluentd

    监控的目的是确保日志采集能稳定高效运行. Fluentd内部运行指标 Fluentd内部保存着一些运行指标,这些指标可通过REST api直接获取,也支持通过第三方工具,如Prometheus,来访问 ...

  4. 阿里云服务器部署Web环境

    一.配置阿里云服务器 进入阿里云官方网站(https://www.aliyun.com/). 初次使用的话使用支付宝快速注册账户,并进行个人实名认证. 点击试用中心. 选择第二个,云服务器2核4G. ...

  5. Android 使用压缩纹理

    本文介绍了什么是压缩纹理,以及加载压缩纹理的核心步骤.并在 Android OpenGLES 平台上实现了压缩纹理的显示. 一.压缩纹理概念 传统的图片文件格式有 PNG . JPEG 等,这种类型的 ...

  6. Qemu/Limbo/KVM镜像 最精简Linux+Wine,可运行Windows软件,内存占用不到70M,存储占用500M

    镜像特征: Alpine Edge系统 内置Wine 7.8,可运行大量Windows 软件 高度精简,内存占用仅68MB,存储占用仅500MB 完全开源 镜像说明: 用户名为root,密码为空格. ...

  7. 洛谷P1115 最大子段和 (线性DP)

    经典的线性DP例题,用f[i]表示以第i个位置结尾的最大连续子段和. 状态转移方程:f[i]=max(f[i],f[i-1]+a[i]); 这里省去了a数组,直接用f数组读数据,如果f[i-1]< ...

  8. hyperf-搭建初始化

    官方文档* https://hyperf.wiki/2.0/#/README 初步搭建1. 安装项目 composer create-project hyperf/hyperf-skeleton 2. ...

  9. python实现多接口翻译软件

    本实验用pyqt5做了一个小软件,里面使用了市面上主流的6种翻译软件接口:谷歌.百度.有道.金山词霸.腾讯.必应,界面如图所示: 以下是程序代码: import time,sys,os,hashlib ...

  10. .NET周报【10月第3期 2022-10-25】

    国内文章 聊一聊被 .NET程序员 遗忘的 COM 组件 https://www.cnblogs.com/huangxincheng/p/16799234.html 将Windows编程中经典的COM ...