Django模型关系

在这里插入图片描述

模型关系

1:1 一对一 (一个身份证对应一个驾照)

  • 是使用外键+唯一约束实现的
  • 对应最多只能有一个
  • 我们通常会在从表中声明关系
    • 主表,从表
  • 主表数据删除,从表数据级联删除
  • 从表数据删除,主表不受影响
  • 谁声明关系,谁就是从表
 driver_idcard = models.OneToOneField(IDCard,on_delete=models.PROTECT)
  • 主表获取从表数据,是通过隐性属性,隐性属性的名字 默认是从表名字小写
  print(idcard.drivercard.driver_lever)
  • 从表获取主表数据,是通过显性属性
print(dc.driver_idcard.id_name)

1:M(一个人对应多辆车)

  • 使用外键实现的
  • 主表获取从表是隐性属性,隐性属性是Manager的子类
    • 支持
      • all
      • filter
      • first
      • last
  • 数据删除和一对一一样
  - 从表获取主表数据,是通过显性属性idcard = car.c_idcardprint(idcard.id_name- 主表获取从表数据,是通过隐性属性,隐性属性的名字 默认是从表名字小写idcard = IDCard.objects.last()cars = idcard.car_set.last()

实例

models.py

from django.db import models# Create your models here.
class IDCard(models.Model):id_num = models.CharField(max_length=32,unique=True)id_name = models.CharField(max_length=32)class DriverCard(models.Model):diver_leverl = models.CharField(max_length=16)driver_idcard = models.OneToOneField(IDCard,on_delete=models.PROTECT)class Car(models.Model):c_type = models.CharField(max_length=32)c_idcard = models.ForeignKey(IDCard,null=True)

view.py

import random
import uuidfrom django.http import HttpResponse
from django.shortcuts import render# Create your views here.
from RelationLearn.models import IDCard, DriverCard, Cardef index(request):return HttpResponse("three index")def add_idcard(request):id_card = IDCard()id_card.id_num = random.randrange(10000000000)id_card.id_name = uuid.uuid4().hexid_card.save()return HttpResponse("add new id card ok")def add_dc(request):dc = DriverCard()dc.diver_level = "c1"id_card = IDCard.objects.last()dc.driver_idcard =id_carddc.save()return HttpResponse("add killer  ok")def delete_idcard(request):id_card = IDCard.objects.last()id_card.delete()return HttpResponse("del idcard  ok")def del_dc(request):dc_card = DriverCard.objects.last()dc_card.delete()return HttpResponse("del dc  ok")def get_idcard(request):dc= DriverCard.objects.last()print(dc.driver_idcard.id_name)return HttpResponse("by carid get id")def get_dc(request):idcard= IDCard.objects.last()print(idcard.drivercard.driver_lever)return HttpResponse("by id get carid")def get_idcard_form_car(request):car =Car.objects.last()idcard = car.c_idcardprint(idcard.id_name)return HttpResponse("by car gei id ")def get_car(request):idcard = IDCard.objects.last()cars = idcard.car_set.last()for car in cars:print(car)car_single = idcard.car_set.first()print(car_single.c_type)return HttpResponse("get cars by id")def add_car(request):# car = Car()# car.c_type = "tiganche"# idcard = IDCard.objects.last()# car.c_idcard = idcard# car.save()car = Car()car.c_type = "olddriver"car.save()idcard = IDCard.objects.last()idcard.car_set.add(car)return HttpResponse("add car ")
  • M:N
    • 使用额外的关系表进行数据记录
    • 关系表使用两个外键实现的
from django.db import models# Create your models here.
class BlogUser(models.Model):u_name =models.CharField(max_length=32)class Blog(models.Model):b_title =models.CharField(max_length=64)b_content =models.TextField()b_user_collect =models.ManyToManyField(BlogUser)

views.py

from django.http import HttpResponse
from django.shortcuts import render# Create your views here.
from ManyLearn.models import *def index(request):return HttpResponse("index many")def add_collect(request):# blog = Blog.objects.last()# # blog= Blog()# user =BlogUser.objects.first()# blog.b_user_collect.add(user)# return HttpResponse("add collect")blog = Blog.objects.last()user = BlogUser.objects.last()user.blog_set.add(blog)return HttpResponse("add collect")def del_collects(request):blog = Blog.objects.all()user = BlogUser.objects.get(id = "3")user.blog_set.remove(*blog)return HttpResponse("del collects ok")
# 查询指定用户的收藏的所有博客
def get_usercollects(request):user = BlogUser.objects.first()# print(user.blog_set.all().values())collections = user.blog_set.all()return render(request,"AllCollects.html",context=locals())
# 查询指定博客被哪些用户收藏了
def get_user(request):blog = Blog.objects.first()# blog=Blog()users = blog.b_user_collect.all()return render(request,"AllCollectsUser.html",context=locals())

在这里插入图片描述

模型级联操作

  • CASECADE
    • 默认模式
    • 默认级联删除
  • PROTECT
    • 保护模式
    • 存在级联数据就不能删除
    • 不存在级联数据就可以删除
  • SET
    • 设置为某值
    • NULL
      • 字段允许为空
    • DEFAULT
      • 字段存在默认值
    • VALUE
      • VALUE是真实的值

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

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

相关文章

Android常用开源项目

Android常用开源项目 Android 2014-05-23 16:39:43 发布您的评价: 4.3 收藏 24收藏Android开源项目第一篇——个性化控件(View)篇包括ListView、ActionBar、Menu、ViewPager、Gallery、GridView、ImageView、ProgressBar、TextView、其他Android开源项目第二篇——工具库…

Django中数据知识点归纳

Django对象的增删改查 我们为了对django对象的增删改查进行总结,先在model.py文件中创建类便于举例 定义学生: class Students(models.Model):snamemodels.CharField(max_length20)sgendermodels.BooleanField(defaultTrue)sagemodels.IntegerField()…

面 试 细 节 一 点 通

面谈的礼节是社会新人及求职者踏人社会工作前最重要且最需学习的课题,因为这关系到是否能顺利踏入社会且寻找到一份合适满意的工作。 一个社会新人除了应注意的面试礼节外,在开始进行面谈之前及面谈结束之后,还有不少必须注意的礼仪。 面谈时…

宽带与流量的关系

流量,一般指的是每秒钟流经某设备的数据的多少。也就是Byte/Second( 字节每秒)。 比方说1M,这个概念的单位叫bPS(bit Per Second)比特每秒。而事实上经常用另外一个词来代替描述,也就是带宽。 而带宽和流量的换算关系是: 1 By…

PHP函数处理方法总结

call_user_func_array (PHP 4 > 4.0.4, PHP 5, PHP 7) call_user_func_array — 调用回调函数,并把一个数组参数作为回调函数的参数 说明 mixed call_user_func_array ( callable $callback , array $param_arr ) 把第一个参数作为回调函数(callback&…

Django删除多对多表关系 :

删除多对多表关系 : # 删除子表与母表关联关系,让小虎不喜欢任何颜色 # 写法1: child_obj Child.objects.get(name"apollo") colors_obj Colors.objects.all() child_obj.favor child_obj.save() # 写法2: child_obj Child.objects.get(name"apo…

git push/pull时总需要输入用户名密码的解决方案

在提交项目代码或者拉代码的时候,git会让你输入用户名密码,解决方案:(我们公司用的是gitlab)执行git config --global credential.helper store命令然后git push origin your-branch会让你输入用户名和密码&#xff0c…

Django源代码写DetailView与ListView

基于类的通用视图 - 展平索引 通用显示视图 以下两个通用的基于类的视图旨在显示数据。在许多项目中,它们通常是最常用的视图。 一、DetailView django.views.generic.detail.DetailView 在执行此视图时,self.object将包含视图正在操作的对象。 此视图…

开源商务智能软件Pentaho

1 简介Pentaho是世界上最流行的开源商务智能软件,以工作流为核心的,强调面向解决方案而非工具组件的,基于java平台的商业智能(Business Intelligence,BI)套件BI,之所以说是套件是因为它包括一个web server平台和几个工具软件:报表…

chrome用type=file获取图片路径并转base64字符串

1 html页面 <div class"col-sm-2" style"height: 200px;margin-top: 14px;"> <input id"photo" name" " type"file" value"选择图片" ng-model"photoUrl"> <input type"button&qu…

Python - Django - 中间件 process_exception

process_exception(self, request, exception) 函数有两个参数&#xff0c;exception 是视图函数异常产生的 Exception 对象 process_exception 函数的执行顺序是按照 settings.py 中设置的中间件的顺序的倒序执行 process_exception 函数只在视图函数中出现异常的时候才执行…

NTV Media Server G3性能测试

Hello&#xff01;大家好&#xff0c;我是资深测试工程师Jackie&#xff0c;今天我来和大家一起对云视睿博的高性能流媒体服务器NTV Media Server G3做一次性能测试。今天测试有一个小目标&#xff0c;那就是验证在一台普通的PC机上&#xff0c;NTV Media Server G3的并发能力是…

人生不只是上坡路

从前的自己都是非常顺利的&#xff0c;觉得自己有一天一定可以成就一番事业。 可是谁也预料不到这几年的变化&#xff0c; 似乎人生就要跌落到了谷底&#xff0c; 不知道该如何去面对&#xff0c; 压力很大、惶恐不安、不知道未来的路该如何去走。 人生不只是上坡路&#xff0c…

Django 时间与时区设置问题

Django 时间与时区设置问题 在Django的配置文件settings.py中&#xff0c;有两个配置参数是跟时间与时区有关的&#xff0c;分别是TIME_ZONE和USE_TZ 如果USE_TZ设置为True时&#xff0c;Django会使用系统默认设置的时区&#xff0c;即America/Chicago&#xff0c;此时的TIME_…

Oracle+ASM单机环境下,开启归档的最简单的方法

在ASM单机环境下&#xff0c;开启归档的最简单的方法。环境&#xff1a;oracle11g 11.2.0.4 登陆sqlplus[oracleudevasm ~]$ sqlplus / as sysdbaSQL*Plus: Release 11.2.0.4.0 Production on Thu Jun 8 18:20:41 2017Copyright (c) 1982, 2013, Oracle. All rights reserved…

【Python】 配置解析ConfigParser 命令行参数解析optparser

ConfigParser ConfigParser包装了配置文件的读取和写入&#xff0c;使得python程序可以更加轻松操作配置文件了。这里的配置文件是指.ini的那种文件&#xff0c;基本格式如下 [section_a] a_key1 a_value1 a_key2 a_value2[section_b] b_key1 b_value1 b_key2 b_value2 b_k…

解决:build_attrs() takes at most 2 arguments (3 given)

1.这个原因是由于captcha版本安装太低引起的&#xff0c;所以导致register页面打开报错 2.解决办法就是安装更高级版本的captcha 解决pip install django-simple-captcha0.5.5

docker registry v2与harbor的搭建

docker的仓库 1 registry的安装 docker的仓库我们可以使用docker自带的registry,安装起来很简单&#xff0c;但是可能有点使用起来不是很方便。没有图形化。 开始安装 1 使用镜像加速器 2 curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://dc945b6d.m…

在windows下安装Redis

一、下载windows版本的Redis 由于官网上没有windows版的下载地址&#xff0c;所以需要下载windows版本的Redis有以下两个地址&#xff1a; 博主的csdn资源地址&#xff1a;http://download.csdn.net/detail/u010608551/9778240 github下载地址&#xff1a;https://github.com/M…

Django REST framework【学习内容】

快速入门 我们将创建一个简单的允许管理员用户查看和编辑系统中的用户和组的API。 项目设置 创建一个名为 tutorial 的新django项目&#xff0c;然后启动一个名为 quickstart 的新app。 # 创建项目目录 mkdir tutorial cd tutorial# 创建一个virtualenv来隔离我们本地的包依…