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开源项目第二篇——工具库…

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

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

开源商务智能软件Pentaho

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

Python - Django - 中间件 process_exception

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

NTV Media Server G3性能测试

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

在windows下安装Redis

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

Django REST framework【学习内容】

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

Flask-DebugToolbar的配置

该扩展为 Flask 应用程序添加了一个包含有用的调试信息的工具栏。 安装 简单地使用 pip 来安装: $ pip install flask-debugtoolbar用法 设置调试工具栏是简单的: from flask import Flask from flask_debugtoolbar import DebugToolbarExtensionapp Flask(__name__)# the…

MVC 中Simditor上传本地图片

1.引用样式和js文件 <link href"~/Content/scripts/plugins/simditor/css/simditor.css" rel"stylesheet" /><script src"~/Content/scripts/plugins/simditor/js/simditor.js"></script> 2.初始化Simditor var editor null;…

在pycharm中自定义模板代码,快速输出固定代码块

pycharm中有时会经常输出固定一段代码,为避免每次重复输入,可以自定义一段模板代码,请看以下图教程: 1. 点击 file 里面的 setting 2. 在搜索框输入live,就会显示出Live Templates, 点击后边的加号, 点击 Live Template 3. 选择设置的语言, 点击下图的Define, 设置要设置…

优质手机APP开发公司的特点

最近自媒体平台封号特严重&#xff0c;获得上亿投资的大号都被封了&#xff0c;或许做自己的APP会是一个好选择。想在众多的app中脱颖而出、希望手机APP获得成功&#xff0c;则必须聘请专业手机APP开发公司。您必须明智地选择公司&#xff0c;因为您的业务的成败取决于您的选择…

celery 学习笔记定时任务和异步任务

1、Celery加入异步和定时任务 Celery除了可以异步执行任务之外&#xff0c;还可以定时执行任务。在实例代码的基础上写个测试方法&#xff1a; import datetime import timefrom celery import shared_task from celery.schedules import crontab from celery.task import pe…

使用WinIO库实现保护模式下的IO和内存读写

问题已解决&#xff1a; 原因是函数的调用方式与WinIO中不一致&#xff0c;使用的时候漏掉了__stdcall。 函数原定义为&#xff1a; 在实际的GPIO读写中遇到以下问题&#xff1a; SetPortVal可正常写入&#xff0c;但是GetPortVal无法读取&#xff0c;程序崩溃&#xff0c;问题…

windows10中远程访问凭据不工作

远程同学电脑&#xff0c;发现输入账号密码还是不行&#xff0c;提示您的凭据不工作&#xff0c;问题解决&#xff1a;WinR---gpedit.msc网络访问----经典。转载于:https://blog.51cto.com/germa66/1934745

pycharm的 crtl + r 使用正则表达式进行 request-header格式更改

pycharm的 crtl r 使用正则表达式进行 request-header格式更改 复制粘贴之前 使用 ‘’‘ ’‘’ 保证格式不乱 改为正确格式

初识MVC

好多次听见别人说MVC&#xff0c;那么MVC到底是什么呢&#xff1f;今天来一探到底&#xff0c;揭开其神奇面纱。。 MVC介绍&#xff1a; MVC全名Model View Controller&#xff0c;是模型&#xff08;Model&#xff09;-视图&#xff08;View&#xff09;-控制器&#xff08;Co…

【Python + Selenium】之JS定位总结

1、滚动条 driver.set_window_size(500,500) js "window.scrollTo(0,200)" #左&#xff1a;距左边横滚、右&#xff1a;距上边竖滚 driver.execute_script(js) 2、获取元素的值 button driver.find_element_by_css_selector("#su") #定位按钮 input…

BigDecimal类整除报错的解决方案

例如&#xff1a; BigDecimal num1 new BigDecimal("10"); BigDecimal num2 new BigDecimal("3"); BigDecimal num3 num1.divide(num2); 其实devide的函数定义如下 BigDecimal.divide(BigDecimal divisor, int scale, RoundingMode roundingMode) ;…

【spider】多线程爬虫

多线程工作原理 多线程示意图 Queue&#xff08;队列对象&#xff09; queue是python中的标准库&#xff0c;可以直接from queue import Queue引用;队列是线程间最常用的交换数据的形式 python下多线程的思考 对于资源&#xff0c;加锁是个重要的环节。Queue&#xff0c;是线…

css设置文字上下居中,一行文字居中,两行或多行文字同样居中。

HTML: <div class"book-detail-store-item align-center-vertical">居中文字</div> CSS: .book-detail-store-item {width: 50px&#xff1b;height&#xff1a;50px&#xff1b;line-height: 25px;font-size: 12px;}/*flex垂直居中对齐*/ .align-center…