一: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. [笔记] CSP 初赛 部分知识整理

    几年前整理的东西,要不就发到网上吧 不过现在这些东西里面也有很多考得比以前少了 卡特兰数 \(f(i)=\sum_\limits{i=0}^{n-1}{f(i)f(n-i-1)}\) 其中\(f(0) ...

  2. GC plan_phase二叉树挂接的一个算法

    楔子 在看GC垃圾回收plan_phase的时候,发现了一段特殊的代码,仔细研究下得知,获取当前数字bit位里面为1的个数. 通过这个bit位为1的个数(count),来确定挂接当前二叉树子节点的一个 ...

  3. Linux实战笔记_ 如何远程访问Kali?

    注:基于2018年安装的kali版本. 启动ssh服务 /etc/init.d/ssh start 或 service ssh start #启动ssh服务 /etc/init.d/ssh statu ...

  4. 九、docker swarm主机编排

    一. 什么是Docker Swarm Swarm 是 Docker 公司推出的用来管理 docker 集群的平台,几乎全部用GO语言来完成的开发的,代码开源在https://github.com/do ...

  5. 漫谈Entity-Component-System

    原文链接 简介 对于很多人来说,ECS只是一个可以提升性能的架构,但是我觉得ECS更强大的地方在于可以降低代码复杂度. 在游戏项目开发的过程中,一般会使用OOP的设计方式让GameObject处理自身 ...

  6. certutil做哈希校验并下载网络文件

    微软Win系统自带,不需要安装的工具,但它是CMD命令行工具,关于命令行工具的说明和使用请参考我以前的文章 Windows系统的命令行(CLI)介绍及入门使用说明 . 这个微软自带的命令行工具叫做 c ...

  7. Java Timer使用介绍

    java.util包下提供了对定时任务的支持,涉及2个类: Timer:定时器类 TimerTask:任务抽象类 使用该定时任务我们需要继承TimerTask抽象类,覆盖run方法编写任务执行代码,并 ...

  8. Hexo多台电脑同步

    如果换了电脑该如何同步Hexo的源文件?把hexo文件从一个电脑cope到另外一个电脑吗?答案肯定不是这样的,因为这里面有好多依赖包,好几万个文件呢,这样显然不合理. 本文提供一种多台电脑同步源文件的 ...

  9. PXE批量装windows(半自动版本)

    一.  环境说明: 客户端:CPU:双核 内存:4GB 内存 80GB   ip地址:DHCP 服务端1:CPU:双核 内存:1GB 内存 20GB   ip地址:192.168.40.254     ...

  10. 线上Electron应用具备哪些特征?

    新用户购买<Electron + Vue 3 桌面应用开发>,加小册专属微信群,参与群抽奖,送<深入浅出Electron>.<Electron实战>作者签名版. 1 ...