Django(9)ORM多表实例

2023-05-16

文章目录

  • 一、Django ORM 多表实例
    • 创建模型
    • 插入数据
  • 二、ORM 插入数据
    • 一对多—外键 ForeignKey
    • 多对多(Many ToManyField):在第三张表添加数据
  • 三、关联管理器——对象调用
    • 1、add()
    • 2、create()
    • 3、remove()
    • 4、clear()
  • 四、ORM查询
    • 1、一对多
    • 2、一对一
    • 3、多对多
  • 五、基于双下划线的跨表查询
    • 1、一对多
    • 2、多对多
    • 3、一对一

此文章参考菜鸟教程:Django ORM – 多表实例 | 菜鸟教程 (runoob.com)

Django版本:

>>> django.VERSION  
(4, 1, 0, 'final', 0)

PS:基于前几章的进度进行修改

一、Django ORM 多表实例

  • 表与表之间的关系可以分为以下三种:
  1. 一对一:一个人对应一个的身份证号,数据字段设置为unique
  2. 一对多:一个家庭有多个人,一般通过外键来实现
  3. 多对多:一个学生有多门课程,一个课程有很多学生,一般通过第三个表来实现关联
  • 下面是菜鸟的示例图
    在这里插入图片描述

创建模型

  • 修改app1/app1_model/models.py
# -*- coding: utf-8 -*-
from django.db import models

class Book(models.Model):
    title = models.CharField(max_length=32)		
    price = models.DecimalField(max_digits=5,decimal_places=2)	
    pub_date = models.DateField()
    publish = models.ForeignKey("Publish",on_delete=models.CASCADE)  #多对一
    authors = models.ManyToManyField("Author")  #多对多

class Publish(models.Model):
    name = models.CharField(max_length=32)
    city = models.CharField(max_length=64)
    email = models.EmailField()

class Author(models.Model):
    name = models.CharField(max_length=32)
    age = models.SmallIntegerField()
    au_detail = models.OneToOneField("AuthorDetail",on_delete=models.CASCADE)  #一对一

class AuthorDetail(models.Model):
    gender_choices = (
        (0,"女"),
        (1,"男"),
        (2,"保密"),
    )
    gender = models.SmallIntegerField(choices=gender_choices)
    tel = models.CharField(max_length=32)
    addr = models.CharField(max_length=64)
    birthday = models.DateField()
  • 说明:
  1. EmailField数据类型是邮箱格式,底层继承CharField进行了封装,相当于Mysql中的varchar
  2. 一般不需要级联更新
  3. 如果有模型类存在外键,在创建数据时,需要先创建外键关联的模型类数据,否则在创建包含外键的模型类数据时,外键的关联模型类数据会找不到
  • 设置一对一OneToOneField = ForeignKey("关联类名",unique=True)

  • 外键在一对多中设置,即models.ForeignKey("关联类名",on_delete=models.CASCADE),后面是设置外键删除时的操作:

  1. CASCADE:默认选项,表示级联删除
  2. PROTECT:保护模式,使用该选项,在删除时,会抛出ProtectedError的错误
  3. SET_NULL:置空模式,删除时,外键字段被设置为空,前提是blank=Truenull=True,定义该字段时,需要外键允许为空
  4. SET_DEFAULT:删除时,外键字段设置为默认值,使用该选项时,需要注意外键的上一个默认值
  5. SET( ):括号里可以是函数,设置自定义的值
  6. DO_NOTHING:什么也不做
  • 在终端创建数据表
(test) PS F:\django\app1> python .\manage.py makemigrations app1_model 
Migrations for 'app1_model':
  app1_model\migrations\0002_authordetail_publish_alter_book_id_author_and_more.py
    - Create model AuthorDetail
    - Create model Publish
    - Alter field id on book
    - Create model Author
    - Add field authors to book
    - Alter field publish on book
    
    
(test) PS F:\django\app1> python .\manage.py migrate app1_model 
Operations to perform:
  Apply all migrations: app1_model
Running migrations:
  Applying app1_model.0002_authordetail_publish_alter_book_id_author_and_more... OK
  • 查看mysql数据库,可以看到有一个app1_model_book_authors这个就是多对多的第三张表

在这里插入图片描述

插入数据

insert into app1_model_publish(name,city,email) values ("华山出版社","华山","hs@163.com"),("明教出版社","黑木崖","mj@163.com");

 
# 先插入 authordetail 表中多数据
insert into app1_model_authordetail(gender,tel,addr,birthday) values (1,13432335433,"华山","1994-5-23"),(1,13943454554,"黑木崖","1961-8-13"),(0,13878934322,"黑木崖","1996-5-20"); 


# 再将数据插入 author,这样 author 才能找到 authordetail 
insert into app1_model_author(name,age,au_detail_id) values ("令狐冲",25,1),("任我行",58,2),("任盈盈",23,3);
  • 执行

在这里插入图片描述

在这里插入图片描述

二、ORM 插入数据

一对多—外键 ForeignKey

方式一:传输对象的形式,返回值的数据类型是对象,即书籍对象

  • 具体步骤:
  1. 获取出版社对象
  2. 给书籍的出版社属性pulish传入出版社对象
- 修改app1/app1/views.py文件
# -*- coding: utf-8 -*-
from django.shortcuts import render,HttpResponse
from app1_model import models

def add_book(request):
    #books = models.Book.objects.create(title="Python",price=500,publish="Python出版社",pub_date="1970-12-10")  
    pub_obj = models.Publish.objects.filter(pk=1).first()
    book = models.Book.objects.create(title="Python教程",price=200,pub_date="2011-11-11",publish=pub_obj)
    print(book,type(book))
    return HttpResponse(book)
  • 访问127.0.0.1:8000/add_book

在这里插入图片描述

在这里插入图片描述

方式二:传入对象id的形式

  • 由于传过来的数据一般都是id,所以传入对象id是比较常用的
  • 在一对多中,设置外键属性的类中,即指的表,Mysql中显示的字段名称是外键属性名_id,返回值的数据类型是对象,即书籍对象
  • 步骤:
  1. 获取出版社对象的id
  2. 给书籍的关联出版社字段pulish_id传入出``版社对象的id`
- 修改app1/app1/views.py文件
# -*- coding: utf-8 -*-
from django.shortcuts import render,HttpResponse
from app1_model import models

def add_book(request):
    #books = models.Book.objects.create(title="Python",price=500,publish="Python出版社",pub_date="1970-12-10")  
    pub_obj = models.Publish.objects.filter(pk=1).first()
    pk = pub_obj.pk
    book = models.Book.objects.create(title="Django教程",price=100,pub_date="2012-12-12",publish_id=pk)
    print(book,type(book))
    return HttpResponse(book)
  • 访问测试

在这里插入图片描述

在这里插入图片描述

多对多(Many ToManyField):在第三张表添加数据

方式一:传入对象形式,没有返回值

  • 步骤:
  1. 获取作者对象
  2. 获取书籍对象
  3. 给书籍对象的authors属性用add的方法纯如作者对象
- 修改app1/app1/views.py文件
# -*- coding: utf-8 -*-
from django.shortcuts import render,HttpResponse
from app1_model import models

def add_book(request):
    #books = models.Book.objects.create(title="Python",price=500,publish="Python出版社",pub_date="1970-12-10")  
    chong = models.Author.objects.filter(name="令狐冲").first() 
    book = models.Book.objects.filter(title="Python教程").first()  
    book.authors.add(chong)
    return HttpResponse(book)
  • 访问127.0.0.1:8000/add_book进行测试

在这里插入图片描述

  • 查看数据库信息

在这里插入图片描述

方式二:传入对象id形式,没有返回值

  • 步骤:
  1. 获取作者对象的id
  2. 获取书籍对象
  3. 给书籍对象的authors属性使用add的方法传入作者的id
# -*- coding: utf-8 -*-
from django.shortcuts import render,HttpResponse
from app1_model import models

def add_book(request):
    #books = models.Book.objects.create(title="Python",price=500,publish="Python出版社",pub_date="1970-12-10")  
    #chong = models.Author.objects.filter(name="令狐冲").first()
    xing = models.Author.objects.filter(name="任我行").filter()
    for i in xing:
        print(i.pk)
        book = models.Book.objects.filter(title="Django教程").first()
        book.authors.add(i.pk)
    return HttpResponse(xing)
  • 访问127.0.0.1:8000/add_book进行测试

在这里插入图片描述

  • 查看数据库信息

在这里插入图片描述

三、关联管理器——对象调用

  • 前提:

多对多:需要双向均有关联管理器

一对多:只有多的那个类的对象需要关联管理器,也就是只有反向才有

注意:一对多只能反向

  • 语法格式:

正向:属性名称

反向:小写类名+_set

  • 常用方法:

1、add()

add()主要用于多对多,把指定的模型对象添加到关联对象集(对象表)中

注意:add()在一对多,即外键中,只能通过传入对象的方式不能通过传入id的方式

*[]的使用,下面是传入对象的方式

# -*- coding: utf-8 -*-
from django.shortcuts import render,HttpResponse
from app1_model import models

def add_book(request):
    #books = models.Book.objects.create(title="Python",price=500,publish="Python出版社",pub_date="1970-12-10")  
    book_obj = models.Book.objects.get(id=2)
    author_list = models.Author.objects.filter(id__gt=2)
    book_obj.authors.add(*author_list)  #将id大于2的作者对象添加到这本书的作者集合中
    return HttpResponse("ok")
  • 访问测试

在这里插入图片描述

  • 查看数据库信息,可以发现id为2的书籍,作者对象的id都是大于2的,即id为2和3的作者

在这里插入图片描述

  • 传入对象id的方式
# -*- coding: utf-8 -*-
from django.shortcuts import render,HttpResponse
from app1_model import models

def add_book(request):
    #books = models.Book.objects.create(title="Python",price=500,publish="Python出版社",pub_date="1970-12-10")  
    book_obj = models.Book.objects.get(id=2)
    #author_list = models.Author.objects.filter(id__gt=2)
    book_obj.authors.add(*[1,3])  #将id为1和3的作者添加到这本书作者的集合中
    return HttpResponse("ok")
  • 访问测试

在这里插入图片描述

  • 查看数据库信息,可以发现id为2的书籍,3个作者都已经添加到了集合中

在这里插入图片描述

  • 下面是反向,反向应该是小写表面_set
# -*- coding: utf-8 -*-
from django.shortcuts import render,HttpResponse
from app1_model import models

def add_book(request):
    #books = models.Book.objects.create(title="Python",price=500,publish="Python出版社",pub_date="1970-12-10")  
    ying = models.Author.objects.filter(name="任盈盈").first()
    book = models.Book.objects.filter(title="Python教程").first()
    ying.book_set.add(book)
    return HttpResponse("ok")
  • 访问测试

在这里插入图片描述

  • 查看数据库信息,可以看到Python教程(id=1)数据的作者添加了任盈盈(id=3)

在这里插入图片描述

2、create()

  • 创建一个新的对象,并且同时将它添加到关联对象集之中,返回新创建的对象
# -*- coding: utf-8 -*-
from django.shortcuts import render,HttpResponse
from app1_model import models

def add_book(request):
    #books = models.Book.objects.create(title="Python",price=500,publish="Python出版社",pub_date="1970-12-10")  
    pub = models.Publish.objects.filter(name="明教出版社").first()
    wo = models.Author.objects.filter(name="任我行").first()
    book = wo.book_set.create(title="ORM教程",price=150,pub_date="2012-10-10",publish=pub)
    print(book,type(book))
    return HttpResponse("ok")
  • 访问测试

在这里插入图片描述

  • 查看数据库信息

在这里插入图片描述
在这里插入图片描述

3、remove()

  • 从关联对象集中移除执行的对象,对于ForeignKey对象,这个方法尽在null=True即可以为空时存在,没有返回值
  • 先来看一下数据库信息,确定好要删除的行

在这里插入图片描述

  • 例如要删除书籍2和作者2的行
# -*- coding: utf-8 -*-
from django.shortcuts import render,HttpResponse
from app1_model import models

def add_book(request):
    #books = models.Book.objects.create(title="Python",price=500,publish="Python出版社",pub_date="1970-12-10")  
    author_obj = models.Author.objects.get(id=2)
    book_obj = models.Book.objects.get(id=2)
    author_obj.book_set.remove(book_obj)
    return HttpResponse("ok")
  • 访问测试

在这里插入图片描述

  • 查看数据库信息,可以看到已经删除
    在这里插入图片描述

4、clear()

  • 从关联对象集合中移除所有对象,删除关联,不会删除对象。对于ForeignKey对象,这个方法仅在null=True即可以为空时存在,没有返回值
# -*- coding: utf-8 -*-
from django.shortcuts import render,HttpResponse
from app1_model import models

def add_book(request):
    #books = models.Book.objects.create(title="Python",price=500,publish="Python出版社",pub_date="1970-12-10")  
    book = models.Book.objects.filter(title="Django教程").first()   
    book.authors.clear()    #删除django教程的所有关联
    return HttpResponse("ok")
  • 访问测试

在这里插入图片描述

  • 查看数据库信息,可以看到Book表中的Django教程行还是存在的,但是关联表book_authors中的Django教程(id=2)的行已经被删除

在这里插入图片描述

在这里插入图片描述

四、ORM查询

  • 基于对象的跨表查询

  • 语法:

正向:属性名称

反向:小写类名_set

1、一对多

  • 查询主键为3的书籍出版社所在的城市,即正向查询
# -*- coding: utf-8 -*-
from django.shortcuts import render,HttpResponse
from app1_model import models

def add_book(request):
    #books = models.Book.objects.create(title="Python",price=500,publish="Python出版社",pub_date="1970-12-10")  
    book = models.Book.objects.filter(pk=3).first()
    res = book.publish.city
    print(res,type(res))
    return HttpResponse("ok")
  • 访问测试
    在这里插入图片描述

  • 查看终端输出和数据库信息,可以看到是相同的

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 查询华山出版社出版的书籍名称,即反向
  • 反向的写法:对象.小写类名_set(pub.book_set)可以跳转到关联的表,即书籍表
  • pub.book_set.all():取出书籍表中的所有书籍对象,在一个QuerySet对象中,遍历取出书籍对象
# -*- coding: utf-8 -*-
from django.shortcuts import render,HttpResponse
from app1_model import models

def add_book(request):
    #books = models.Book.objects.create(title="Python",price=500,publish="Python出版社",pub_date="1970-12-10")  
    pub = models.Publish.objects.filter(name="华山出版社").first()
    res = pub.book_set.all()
    for i in res:
        print(i.title)
    return HttpResponse("ok")
  • 访问测试
    在这里插入图片描述

  • 查看终端输出和数据库信息

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2、一对一

  • 正向:对象.属性(author.au_detail)可以跳转到关联的表
  • 下面查询令狐冲的电话
# -*- coding: utf-8 -*-
from django.shortcuts import render,HttpResponse
from app1_model import models

def add_book(request):
    #books = models.Book.objects.create(title="Python",price=500,publish="Python出版社",pub_date="1970-12-10")  
    author = models.Author.objects.filter(name="令狐冲").first()
    res = author.au_detail.tel
    print(res,type(res))
    return HttpResponse("ok")
  • 访问测试

在这里插入图片描述

  • 查看终端输出和数据库信息

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 查询到所有住址在黑木崖的作者姓名,即反向,一对一的反向,使用对象.小写类名即可,不用加_set
  • 反向:对象.小写类名(addr.author)可以跳转到关联的表
# -*- coding: utf-8 -*-
from django.shortcuts import render,HttpResponse
from app1_model import models

def add_book(request):
    #books = models.Book.objects.create(title="Python",price=500,publish="Python出版社",pub_date="1970-12-10")  
    addr = models.AuthorDetail.objects.filter(addr="黑木崖").first()  
    res = addr.author.name
    print(res,type(res))
    return HttpResponse("ok")
  • 访问测试

在这里插入图片描述

  • 查看终端输出和数据库信息,由于上面查询时使用了first()方法,所以只输出了一个作者名称
    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3、多对多

  • 正向:对象.属性(book.authors)可以跳转到关联的表

  • 下面寻找Python教程的所有作者以及手机号,即正向,由于作者表里并没有手机号,所以还需要通过对象.属性(i.au_detail)跳转到关联的表

# -*- coding: utf-8 -*-
from django.shortcuts import render,HttpResponse
from app1_model import models

def add_book(request):
    #books = models.Book.objects.create(title="Python",price=500,publish="Python出版社",pub_date="1970-12-10")  
    book = models.Book.objects.filter(title="Python教程").first()
    res = book.authors.all()
    for i in res:
        print(i.name,i.au_detail.tel)
    return HttpResponse("ok")
  • 访问测试

在这里插入图片描述

  • 查看终端输出和数据库信息

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 下面查询任我行写的所有书籍的名称,即反向
# -*- coding: utf-8 -*-
from django.shortcuts import render,HttpResponse
from app1_model import models

def add_book(request):
    #books = models.Book.objects.create(title="Python",price=500,publish="Python出版社",pub_date="1970-12-10")  
    author = models.Author.objects.filter(name="任我行").first()
    res = author.book_set.all()
    for i in res:
        print(i.title)
    return HttpResponse("ok")
  • 访问测试

在这里插入图片描述

  • 查看终端输出和数据库信息

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

五、基于双下划线的跨表查询

  • 正向:属性名称__跨表的属性名称
  • 反向:小写类名__跨表的属性名称

1、一对多

  • 查询华山出版社出版过的所有书籍名称和价格
# -*- coding: utf-8 -*-
from django.shortcuts import render,HttpResponse
from app1_model import models

def add_book(request):
    #books = models.Book.objects.create(title="Python",price=500,publish="Python出版社",pub_date="1970-12-10")  
    res = models.Book.objects.filter(publish__name="华山出版社").values_list("title","price")
    return HttpResponse(res)
  • 访问测试

在这里插入图片描述

  • 查看数据库信息

在这里插入图片描述

在这里插入图片描述

  • 下面是反向,通过小写类名__跨表的属性名称(book__title,book__price)跨表获取数据
# -*- coding: utf-8 -*-
from django.shortcuts import render,HttpResponse
from app1_model import models

def add_book(request):
    #books = models.Book.objects.create(title="Python",price=500,publish="Python出版社",pub_date="1970-12-10")  
    res = models.Publish.objects.filter(name="华山出版社").values_list("book__title","book__price")
    return HttpResponse(res)
  • 访问测试
    在这里插入图片描述

2、多对多

  • 查询任我行出过的所有书籍的名称

  • 正向:通过属性名称__跨表的属性名称(authors__name)跨表获取数据:

# -*- coding: utf-8 -*-
from django.shortcuts import render,HttpResponse
from app1_model import models

def add_book(request):
    #books = models.Book.objects.create(title="Python",price=500,publish="Python出版社",pub_date="1970-12-10")  
    res = models.Book.objects.filter(authors__name="任我行").values_list("title")
    return HttpResponse(res)
  • 访问测试

在这里插入图片描述

  • 反向:通过小写类名__跨表的属性名称(book__title)跨表获取数据
# -*- coding: utf-8 -*-
from django.shortcuts import render,HttpResponse
from app1_model import models

def add_book(request):
    #books = models.Book.objects.create(title="Python",price=500,publish="Python出版社",pub_date="1970-12-10")  
    res = models.Author.objects.filter(name="任我行").values_list("book__title")
    return HttpResponse(res)
  • 访问测试

在这里插入图片描述

3、一对一

  • 查询任我行的手机号

  • 正向:通过**属性名称__跨表的属性名称(au_detail__tel)跨表查询数据

# -*- coding: utf-8 -*-
from django.shortcuts import render,HttpResponse
from app1_model import models

def add_book(request):
    #books = models.Book.objects.create(title="Python",price=500,publish="Python出版社",pub_date="1970-12-10")  
    res = models.Author.objects.filter(name="任我行").values_list("au_detail__tel")
    return HttpResponse(res)
  • 访问测试

在这里插入图片描述

  • 反向:通过小写类名__跨表的属性名称(author__name)跨表获取数据
# -*- coding: utf-8 -*-
from django.shortcuts import render,HttpResponse
from app1_model import models

def add_book(request):
    #books = models.Book.objects.create(title="Python",price=500,publish="Python出版社",pub_date="1970-12-10")  
    res = models.AuthorDetail.objects.filter(author__name="任我行").values_list("tel")
    return HttpResponse(res)
  • 访问测试

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django(9)ORM多表实例 的相关文章

随机推荐

  • SecureCRT 密码解密

    SecureCRT xff08 8 以上 xff09 配置的密码存放在 Config Sessions下面的ini文件中 xff0c 内容如下 xff1a S Username 61 S Monitor Password V2 61 S P
  • AD10 四层板经验(层的性质)

    层的性质 xff1a 内部层有两种 xff1a plane和layer xff0c 他们的区别如下 xff1a plane是所有Layer的其中一个 xff0c Layer是指层 xff0c 例如有常见的信号层Signal Layers 顶
  • Centos7下httpd最新版本安装或者更新至最新版本

    查找Centos上软件库里的httpd版本 yum info httpd yum info httpd 已加载插件 xff1a fastestmirror Loading mirror speeds from cached hostfile
  • 修改git远程仓库地址

    由于git仓库的地址发生了变化 xff0c 需要修改仓库地址才能push 查看本地工程git仓库关联的远程仓库地址 xff1a span class token function git span remote v 删除本地关联的远程仓库地
  • INSTALL_FAILED_NO_MATCHING_ABIS 的解决办法

    在Android模拟器上安装apk的时候出现 xfeff xfeff INSTALL FAILED NO MATCHING ABIS 这个错误提示的解决办法 是由于使用了native libraries 该native libraries
  • IntelliJ IDEA 控制台中文乱码

    1 预热 刚刚接触IntelliJ IDEA几天 xff0c 在易用性方面的确比Eclipse好很多 xff0c 比较智能 xff0c 各种插件 工具都已经集成 xff0c 和Mac OS X类似 开箱即用 但是还是老大难问题 中文乱码 x
  • unable to start the monitor on 4454 ,an other instance is problaly using the same port

    在打开idea studio后 xff0c 再打开android studio xff0c 或者反过来 xff0c 打开项目的时候就会报 xff1a unable to start the monitor on 4454 xff0c an
  • windows中为cmd设置代理

    在CMD环境下设置代理可能不是很常用 xff0c 但是某些情况下还是可能会用到 xff0c 比如有些资源网站被墙了 xff0c 此时你如果想访问这些资源时 xff0c 只能通过代理来访问相应的资源 xff0c 而你需要在CMD环境下下载墙外
  • version `GLIBCXX_3.4.21' not found 解决办法

    在安装cmake3 5 1运行 bootstrap的时候出现如下提示 xff1a gmake cmake 是最新的 span class hljs header usr soft cmake 3 5 1 Bootstrap cmk cmak
  • Oracle死锁查询及处理

    一 数据库死锁的现象 程序在执行的过程中 xff0c 点击确定或保存按钮 xff0c 程序没有响应 xff0c 也没有出现报错 二 死锁的原理 当对于数据库某个表的某一列做更新或删除等操作 xff0c 执行完毕后该条语句不提 交 xff0c
  • Ubuntu 18.04添加中文输入法

    找到设置 xff1a 点击 Manager Installed Languages 出现下图提示 xff1a Keyboard input method system 里面有Ibus XIM fcitx none 三种输入架构 xff0c
  • KEIL问题【打开文件太多造成任何按钮都不可点】【Keil4 编译时出现RL-ARM is not allowed with this license 】【 局部变量仿真显示not in scope】

    SYD8801是一款低功耗高性能蓝牙低功耗SOC xff0c 集成了高性能2 4GHz射频收发机 32位ARM Cortex M0处理器 128kB Flash存储器 以及丰富的数字接口 SYD8801片上集成了Balun无需阻抗匹配网络
  • Django(2)模板、标签

    文章目录 一 使用Django模板修改页面二 Django模板标签 变量 列表 字典 过滤器1 default2 length3 filesizeformat4 date5 truncatechars6 safe if else标签 for
  • Django(3)模型

    文章目录 一 Django 模型 ORM二 数据库配置三 定义模型 xff08 创建数据表 xff09 四 数据库基本操作 插入数据 获取数据 xff08 1 xff09 查询所有的数据行 xff08 2 xff09 where条件查询 x
  • Django(4)表单

    文章目录 一 概述二 GET方法三 POST方法四 Request对象五 QueryDict对象 此文章参考菜鸟教程 xff1a Django 表单 菜鸟教程 runoob com Django版本 xff1a span class tok
  • Django(5)视图

    文章目录 一 视图概述二 请求对象HttpRequest xff08 1 xff09 GET xff08 2 xff09 POST xff08 3 xff09 body xff08 4 xff09 path xff08 5 xff09 me
  • Django(6)路由

    文章目录 一 路由概述二 正则路径中的分组 xff08 1 xff09 正则路径中的无名分组 xff08 2 xff09 正则路径中的有名分组 xff08 3 xff09 路由分发 三 反向解析 xff08 使用reverse xff09
  • Django(7)Admin管理工具

    文章目录 一 概述二 使用管理工具 xff08 1 xff09 激活管理工具 xff08 2 xff09 使用管理工具 xff08 3 xff09 复杂模型 xff08 4 xff09 自定义表单 xff08 5 xff09 内联 xff0
  • Django(8)ORM单表实例

    文章目录 一 Django ORM 单表实例创建新模型 二 数据库操作 xff08 1 xff09 添加数据 xff08 2 xff09 查找数据 filter exclude get order by reverse count firs
  • Django(9)ORM多表实例

    文章目录 一 Django ORM 多表实例创建模型插入数据 二 ORM 插入数据一对多 外键 ForeignKey多对多 xff08 Many ToManyField xff09 xff1a 在第三张表添加数据 三 关联管理器 对象调用1