choices参数的使用、MVC和MTV的模式、创建表对表关系的三种创建方式

【1】choices参数的使用

应用场景:针对表中可能列表完全的字段,采用choices参数

 

例如:性别,代码如下

# 1.创建一张表class gender_info(models.Model):name = models.CharField(max_length=32)password = models.CharField(max_length=32)# 创建一个映射关系gender_choices = ((1,'男'),(2,'女'),(3,'其它'),)gender = models.IntegerField(choices=gender_choices)# 2.导入数据from app01 import modelsmodels.gender_info.objects.create(name='kevin',password=12,gender=1)models.gender_info.objects.create(name='jack',password=123,gender=2)models.gender_info.objects.create(name='tank',password=121,gender=3)models.gender_info.objects.create(name='jerry',password=1213,gender=4)# 3.查找数据'''使用choices参数查找结果要使用get_字段名_display()'''obj = models.gender_info.filter(id=1).first()print(obj.gender)    # 返回的结果是1print(obj.get_gender_display())    # 返回的结果是男'''
注意事项:当查询的结果没有映射关系时,查找的结果不会报错,只会返回我们给的值。例如obj1 = models.gender_info.objects.filter(id=4).first()print(obj1.get_gender_display())    # 返回的结果为4'''

【2】MVC和MTV的模式

【2.1】MVC

  • 保持各组件的松耦合关系
  • MVC分成3个部分
    • 模型(M)
      • 负责业务对象和数据库的映射
    • 控制器(C)
      • 解释用户的输入调用模型,和视图完成用户的请求
    • 视图(V)
      • 负责与用户交互(页面)

图解

        

【2.2】MTV

  • MTV分别代表的关系
    • M代表模型(Model):负责业务对象和数据库的关系映射(ORM)
    • T代表模板(Templates):负责如何把页面展示给用户(html)
    • V代表视图(View):负责业务逻辑,并在适当时候调用Model合Template

除了以上三层之外,还需要一个URL分发器,它的作用是将一个个URL的页面请求分发给不同的View处理,View再调用相应的Model和Template

MTV的响应模式图

【3】表关系多对多创建的三种方式

        【3.1】通过ManyToManyField自动创建第三张表

class Book(models.Model):title = models.CharField(max_length=32, verbose_name="书名")# 通过ORM自带的ManyToManyField自动创建第三张表
class Author(models.Model):name = models.CharField(max_length=32, verbose_name="作者姓名")books = models.ManyToManyField(to="Book", related_name="authors")# 全自动
它的优势就是自动帮我们创建表,而且还可以使用那四个方法:add set remove clear
# 缺点就是扩展性非常差

        【3.2】全手动创建第三张表

全手动
# 自己创建第三张表,分别通过外键关联书和作者
class Book(models.Model):title = models.CharField(max_length=32, verbose_name="书名")class Author(models.Model):name = models.CharField(max_length=32, verbose_name="作者姓名")# 自己创建第三张表,分别通过外键关联书和作者
class Author2Book(models.Model):author = models.ForeignKey(to="Author")book = models.ForeignKey(to="Book")register_time=''它的优势:可扩展性很高
缺点:不能使用orm查询方法了,那四个方法也不用用了add set remoce clear 都不能用了

        【3.3】半自动:设置ManyToManyField并指定自行创建的第三张表

class Author(models.Model):name = models.CharField(max_length=32, verbose_name="作者姓名")books = models.ManyToManyField(to="Book", through="Author2Book", through_fields=("author", "book"))# through_fields接受一个2元组('field1','field2'):# 其中field1是定义ManyToManyField的模型外键的名(author),field2是关联目标模型(book)的外键名。class Author2Book(models.Model):author = models.ForeignKey(to="Author")book = models.ForeignKey(to="Book")优点:还可以使用orm的方法及正反向查询,但是不能使用add set remove clear方法了

推荐使用方式二或者方式三,因为方式二和方式三的扩展性比较高,修改或者增添的时候比较好操作。

 

不推荐使用方式一,因为扩展性比较差

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/154068.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大数据题目的解题技巧

目录 大数据题目的技巧总括 实例精析 实例一 实例二 实例三 大数据题目的技巧总括 (1)哈希函数可以把数据按照种类均匀分流; (2)布隆过滤器用于集合的建立与查询,并可以节省大量空间; &…

ubuntu 安装 gparted

前提环境: 阿里云的源。 sudo apt update sudo apt upgrade sudo apt install gparted 搜索:

Android AIDL中使用Surface问题

1.构建ITest.aidl文件 package com.xxx.xxxx;import android.view.Surface;interface IMonitorService {boolean addSurface(in Surface surface);boolean removeSurface(in Surface surface); } 2.构建时报错 3.Surface源码分析 android.view.Surface中包含两个Surface类&am…

Spring Boot和Spring MVC的区别

1 Spring MVC 是Spring的一个模块,是一个web框架。分为Model,View,Controller(模型层、视图层、控制层)。 2 Spring Boot Spring Boot 自动配置,降低了项目搭建的复杂度。Spring框架需要大量的配置&…

查看windows后台进程命令行参数

wmic process where processid[PID] get commandline管理员身份运行cmd,输入以上命令,[PID]替换为任务管理器中看到的PID

万字解析设计模式之 装饰者模式

一、装饰者模式 1.1概述 装饰者模式是一种结构型设计模式,它允许在运行时动态地为一个对象添加额外的职责。它以一种透明的方式来扩展对象的功能,而不需要通过子类来实现。在装饰者模式中,有一个基本对象,也称为组件,…

SpringBean的配置详解 --中

目录 Bean的初始化和销毁方法配置 Bean的初始化和销毁方法配置 扩展 Bean的实例化 Bean的初始化和销毁方法配置 当lazy-init设置为true时为延迟加载,也就是当Spring容器加载的时候,不会立即创建Bean实例,等待用到时再创建Bean实例并存储到单…

【鸿蒙应用ArkTS开发系列】- 云开发入门实战一使用鸿蒙登录组件实现客户端登录

目录 概述使用云端一体化开发模板创建项目工程创建登录入口页面集成登录SDK组件依赖登录组件SDK使用登录组件SDK 开启“手机号码”和“邮箱地址”认证方式 概述 通过本次课程,我们将学习怎么使用云端一体化开发模板来创建云开发工程,以及如何使用鸿蒙登…

外卖小程序系统:数字化餐饮的编码之道

在当今数字化时代,外卖小程序系统成为了餐饮业的一项技术巨制。这个系统不仅提供了便捷的点餐体验,更通过先进的技术手段,实现了高效订单处理、实时配送追踪以及个性化推荐。让我们深入了解外卖小程序系统的技术魔法,一起揭秘数字…

SSL加密

小王学习录 今日摘录前言HTTP + SSL = HTTPSSSL加密1. 对称加密2. 非对称加密 + 对称加密3. 证书今日摘录 但愿四海无尘沙,有人卖酒仍卖花。 前言 SSL表示安全套接层,是一个用于保护计算机网络中数据传输安全的协议。SSL通过加密来防止第三方恶意截取并篡改数据。在实际应用…

腾讯云标准型S5云主机性能评测_CPU内存_带宽系统盘测评

腾讯云服务器CVM标准型S5实例具有稳定的计算性能,CVM 2核2G S5活动优惠价格280.8元一年自带1M带宽,15个月313.2元、2核4G配置748.2元15个月,CPU内存配置还可以选择4核8G、8核16G等配置,公网带宽可选1M、3M、5M或10M,腾…

基于STM32CubeMX和keil采用RTC时钟周期唤醒和闹钟实现LED与BEEP周期开关

文章目录 前言1. RTC概念1.1 RTC的时钟信号源1.2 预分频器1.3 实时时钟与日历数据1.4 周期性自动唤醒1.5 可编程闹钟 2. RTC相关中断3. STM32CubeMX配置3.1 时钟配置3.2 引脚配置3.3 RTC配置3.3.1 模式选择3.3.2 RTC基本参数配置3.3 中断配置 4. 代码编写总结 前言 RTC的功能有…

Spring Boot中使用AOP统一处理Web请求日志

AOP AOP,也就是 Aspect-oriented Programming,译为面向切面编程,是计算机科学中的一个设计思想,旨在通过切面技术为业务主体增加额外的通知(Advice),从而对声明为“切点”(Pointcut…

1.0 Zookeeper 教程

分类 Zookeeper 教程 ZooKeeper 是 Apache 软件基金会的一个软件项目,它为大型分布式计算提供开源的分布式配置服务、同步服务和命名注册。 ZooKeeper 的架构通过冗余服务实现高可用性。 Zookeeper 的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来&…

最长公共子串 动态规划

#include<iostream> #include<string.h> #include<stdio.h> #include<math.h> using namespace std; int main(){ string s1,s2; cin>>s1>>s2; if(s1.size() > s2.size()) //以短的作为s1 swap(s1,s2); int le…

详细讲解什么是观察者模式

观察者模式&#xff08;Observer Pattern&#xff09;是一种行为设计模式&#xff0c;它定义了一种一对多的依赖关系&#xff0c;让多个观察者对象同时监听某一个主题对象&#xff0c;当主题对象状态发生变化时&#xff0c;所有依赖于它的观察者都会得到通知并自动更新。 该模…

Git 服务器搭建

目录 1、安装Git 2、创建证书登录 3、初始化Git仓库 4、克隆仓库 上一章节中我们远程仓库使用了 Github&#xff0c;Github 公开的项目是免费的&#xff0c;2019 年开始 Github 私有存储库也可以无限制使用。 当然我们也可以自己搭建一台 Git 服务器作为私有仓库使用。 接…

COCO格式转化为YOLOv8格式

COCO格式转化为YOLOv8格式 目录格式代码 目录格式 yolov8仅支持YOLO格式的标签&#xff0c;COCO的默认标签为JSON格式&#xff0c;所以需要将COCO格式转换为YOLO格式。 如果训练COCO数据集的话一定要按照这个格式&#xff0c;摆放目录images&#xff0c;labels这两个目录名不…

学习c#的第二十三天

目录 C# 委托&#xff08;Delegate&#xff09; 委托概述 使用委托 带有命名方法的委托与匿名方法 示例 如何合并委托&#xff08;多播委托&#xff09; 示例 如何声明、实例化和使用委托 示例 C# 委托&#xff08;Delegate&#xff09; 委托是一种引用类型&#xff…

公网环境固定域名异地远程访问内网BUG管理系统

文章目录 前言1. 本地安装配置BUG管理系统2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射本地服务3. 测试公网远程访问4. 配置固定二级子域名4.1 保留一个二级子域名5.1 配置二级子域名6. 使用固定二级子域名远程 前言 BUG管理软件,作为软件测试工程师的必备工具之一。在…