首页 > 其他分享 >15、 Django-多表操作-多个模块的关联-多对多的增删改查- models.manytomany()

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

时间:2024-07-09 22:30:36浏览次数:7  
标签:多表 models movie 改查 manytomany objects user User

针对多对多的关系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 去收藏阿凡达-1
    user = 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),
]

标签:多表,models,movie,改查,manytomany,objects,user,User
From: https://www.cnblogs.com/littlecc/p/18125080

相关文章

  • 14、 Django-多表操作-多个模块的关联-一对多的增删改查- models.ForeignKey()
    #多模块关联--关联分类:Django中的三个函数--ForeignKey-称为外键:一对多、将字段定义在多的一端中--ManyToMnayField:多对多、将字段定义在两端的任意一端中--OneToOneField:一对一、将字段定义在任意一端中 如:一对一:一对多:多对多:常用......
  • 6. DQL-多表查询
        本小节主要讲解数据库的多表查询功能,可实现从多个表中查询数据,多表查询内容包括内连接,外连接,笛卡尔积,等值连接,非等值连接,SQL99标准链接语法以及联合查询。6.1.1多表查询的介绍从多个表中获取数据思考如下问题?写一条查询语句,查询员工姓名、部门名称、工作地点? ......
  • Mysql中索引的分类、增删改查与存储引擎对应关系
    场景Mysql中存储引擎简介、修改、查询、选择:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/140269624上面介绍Mysql的存储引擎。下面介绍索引的分类和使用。注:博客:https://blog.csdn.net/badao_liumang_qizhi实现Mysql中索引的分类1、普通索引和唯一索引......
  • FD-Align: Feature Discrimination Alignment for Fine-tuning Pre-Trained Models in
    文章汇总动机CLIP注意图更关注背景,全面微调后的CLIP关注在了非显著特征的地方。FD-Align注意图倾向于关注标签相关的信息。解决办法总损失有两个损失函数组成:对VisualEncoder进行微调冻结CLIP的文本编码器g......
  • RAG知识库之多表示索引
          在朴素RAG中通常会对文档、文本进行分块后进行文档嵌入,对所有文件、文本都没有经过采用Chunk方法可能有时候效果不是和好,尽管有着各种分块策略有针对大文件的、针对小文件的策略,但都难免可能会造成上下文语义丢失。      分块通常有两个非常重要的参数chunk_si......
  • 12、flask-模型-models
    ORMFlask通过Model操作数据库、不管你数据库的类型是Mysql或者是sqlite、Flask自动帮你生成相应的数据库类型的sql语句、所以不需要关注sql语句和类型、对数据库的操作flask会自动帮我们完成Flask使用关系映射(ObjectRelationalMappong,简称ORM)框架去操控数据库ORM对象关系......
  • Securing Large Language Models: Threats, Vulnerabilities and Responsible Practic
    本文是LLM系列文章,针对《SecuringLargeLanguageModels:Threats,VulnerabilitiesandResponsiblePractices》的翻译。保护大型语言模型:威胁、漏洞和负责任的做法摘要1引言2背景3LLM的安全和隐私问题4对抗性攻击和LLM漏洞5LLM的风险和失误6风险缓解策......
  • Advanced Generative Models (Diffusion)
    ......
  • 2.模块文件以及增删改查(CURD操作)
    创建db.pydb.py文件是我们管理数据库连接和模型基类的地方。它让我们的代码更加模块化和可维护,实际生产中也是类似的,无论是在FastAPI或者Flask等框架中,当使用到SqlAlchemy时,的的确确需要一个单独db.py,存储着引擎、会话以及模型基类。这个文件请务必建好,后续所有教程都会......
  • Calibrating Large Language Models Using Their Generations Only
    本文是LLM系列文章,针对《CalibratingLargeLanguageModelsUsingTheirGenerationsOnly》的翻译。仅使用它们的生成来校准大型语言模型摘要1引言2相关工作3方法4实验5讨论6结论摘要随着大型语言模型(LLM)越来越多地部署在面向用户的应用程序中,通过......