15、 Django-多表操作-多个模块的关联-多对多的增删改查- models.manytomany()

news/2024/11/18 11:38:07/文章来源:https://www.cnblogs.com/littlecc/p/18125080

针对多对多的关系django会自动创建第三张表、也可以通过through参数指定第三张表

 

models.py

from django.db import models# Create your models here.#多对多
#用户表:电影     = N:M
#一个用户可以收藏多部电影
#一部电影可以被不同的用户收藏#电影
class Movie(models.Model):name = models.CharField(max_length=100)duration = models.IntegerField(default=90)  #电影时长#用户
class User(models.Model):name = models.CharField(max_length=30)age = models.IntegerField(default=18)#定义多对多#这里绑定上面的电影类#这里movies 相当于是 中间表的对象movies = models.ManyToManyField(Movie)#数据迁移
#迁移后会产生三个表:#App_ManytoMany_movie#App_ManytoMany_user#App_ManytoMany_user_movies       #这个就是中间表、自动生成-拥有两张表的主键+本身的主键字段

 

views.py

from django.shortcuts import render, HttpResponse
from App_ManytoMany.models import *#多对多#增加数据
def add(request):# #添加User表数据# for i in range(1, 10):#     User.objects.create(name = f'张三-{i}', age = i)#添加movie表数据# for i in range(1, 10):#     Movie.objects.create(name = f'阿凡达-{i}', duration = 100+i)#添加中间表的数据#让张三-1 去收藏阿凡达-1user = User.objects.get(name='张三-1')    #获取张三-1的信息movie = Movie.objects.get(name='阿凡达-1') #获取阿凡达-1的信息#添加收藏、以下方法选其一即可# user.movies.add(movie)  #用户收藏电影 -这里的movies是models中的User类里绑定多对多关系的对象movie.user_set.add(user)    #或将电影添加到用户张三-1的收藏中   -这里的user_set是默认自动创建的对象(可获取被绑定的表(中间表)的所有数据)return HttpResponse('添加成功')#删除
def delete(request):#删除User表数据# User.objects.filter(id=9).delete()#删除Movie表数据# Movie.objects.filter(id__gte=10).delete()#删除中间表数据user = User.objects.get(name='张三-1')        #先找出用户user.movies.filter(name='阿凡达-1').delete()   #再找出用户所对应的电影  - 这里的movies是models中的User类里绑定多对多关系的对象、可以获取中间表的所有对象值return HttpResponse('删除成功')#查询数据
def get_user_movie(request):#获取用户收藏的电影user = User.objects.get(id=1)   #拿到id=1的用户print(user.movies.all())    #通过movies-中间表对象.all()获取用户id=1收藏的所有的电影#获取电影被哪些用户收藏movie = Movie.objects.get(id=4)print(movie.user_set.all())return HttpResponse('查询成功')

 

urls.py


from django.contrib import admin
from django.urls import path#多对多
from App_ManytoMany import views as manytomany_view
urlpatterns = [#多对多#增加数据路由path('manytomany/adduser/', manytomany_view.add),# 删除数据路由path('manytomany/deluser/', manytomany_view.delete),# 查询数据路由path('manytomany/getuser/', manytomany_view.get_user_movie),path('admin/', admin.site.urls),
]

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

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

相关文章

14、 Django-多表操作-多个模块的关联-一对多的增删改查- models.ForeignKey()

#多模块关联-- 关联分类:Django中的三个函数-- ForeignKey-称为外键:一对多、将字段定义在多的一端中-- ManyToMnayField:多对多、将字段定义在两端的任意一端中-- OneToOneField:一对一、将字段定义在任意一端中如:一对一:一对多:多对多:常用 如: 模型models.py from …

一文熟悉拖拽式表单设计器的方方面面

通过本文,可以详细了解拖拽式表单设计器的更多优势和特点。很多客户朋友都想知道用什么样的软件平台可以实现提质、降本、增效的目的。可以来了解低代码技术平台、拖拽式表单设计器的更多功能与特点。作为专业的服务商,流辰信息为客户提供整套低代码技术平台服务解决方案,通…

Simple WPF: C# 使用基本的async/await实现异步

本文介绍了基本async/await关键字基于TAP任务异步模型的异步任务处理方法。最新内容优先发布于个人博客:小虎技术分享站,随后逐步搬运到博客园。 创作不易,如果觉得有用请在Github上为博主点亮一颗小星星吧! 博主开始学习编程于11年前,年少时还只会使用cin 和cout ,给单片…

植物大战僵尸1.2.0.1073汉化版

下载链接:https://download.csdn.net/download/hello_hlqk/89528378?spm=1001.2101.3001.9499 植物大战僵尸是一款益智策略类塔防游戏,玩家通过武装多种植物切换不同的功能,快速有效地把僵尸阻挡在入侵的道路上。不同的敌人,不同的玩法构成五种不同的游戏模式,加之黑夜、…

3-电子支付技术与系统

3.1 电子货币及其职能 3.1.1 电子货币的定义 在电子商务迅速发展和金融电子化的背景下,电子货币成为媒介商品交易的重要工具。电子货币(ElectronicMoney,)是指用一定金额的现金或存款从发行者处兑换并获得代表相同金额的数据或者通过银行及第三方推出的快捷支付服务,通过使…

先有鸡还是先有蛋?这是领域驱动设计落地最大的困局

本文书接上回 《关于领域驱动设计,大家都理解错了》 欢迎关注公众号“老肖想当外语大佬”: https://mp.weixin.qq.com/s/HHJ5vt2_iT0-CFcw0HcPnA 先有鸡还是先有蛋的困局 前文我们提出了“领域驱动设计是一种价值观”这个观点,那么落地领域驱动设计就是践行价值观的过程,实…

2017年,我成为了技术博主

2017年9月,我已经大三了。 >>上一篇(爪哇,我初窥门径) 我大二学了很多java技术,看似我一会就把javaweb/ssh/ssm这些技术栈给学了。 这些技术确实不难,即便是我,我都能学会,门槛并不高。 但是,这也不是能随便百度学学,10分钟就懂了,学会了。 从理解技术的用途,…

一起了解自定义流程表单开发的主要优势

低代码技术平台、自定义流程表单开发的主要优势特点表现在哪来?当前,想要进行流程化办公,应用专业的软件平台产品是非常重要的。低代码技术平台拥有可视化操作界面、很灵活、易维护等优势特点,可以应用于很多中小型流程化办公中。那么,低代码技术平台、自定义流程表单开发…

[NodeJS] JavaScript模块化

这篇文章介绍了JavaScript模块化的发展历程及各种方案,包括IIFE、CommonJS、AMD、CMD、UMD及ESM。对比了各方案的特点和优缺点。同时,深入剖析了Node.js中CommonJS的模块加载机制。JavaScript诞生于1995年,一开始只是用于编写简单的脚本。 随着前端开发任务越来越复杂,Java…

论文阅读: 面向Planning的端到端智驾Planning-oriented Autonomous Driving

设计一个更优的、可理解的、面向最终目标的框架。基于这个面向Planning的思想,他们提出了 Unified Autonomous Driving (UniAD)方案,一种新的自动驾驶框架。这个方案从全局视角出发,让智驾的各个模块特征提取可以互相补充,各个任务之间可以通过统一的查询接口通信。在此基础…

基于FileZilla上传、下载服务器数据的方法

本文介绍FileZilla软件的下载、配置与使用方法~本文介绍FileZilla软件的下载、配置与使用方法。在之前的博客中,我们提到了下载高分遥感影像数据需要用到FTP(文件传输协议,File Transfer Protocol)软件FileZilla;这一软件用以在自己的电脑与服务器之间相互传输数据,在进行…

text1

sad das dasdasdgrdgt是g天热共同的sgtd发广泛的撒旦撒撒大大大叔