前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Django ORM 一对多 和 多对多

Django ORM 一对多 和 多对多

作者头像
kirin
发布于 2020-05-12 08:41:05
发布于 2020-05-12 08:41:05
2.5K00
代码可运行
举报
文章被收录于专栏:Kirin博客Kirin博客
运行总次数:0
代码可运行

django ORM中一对多,和多对多字段正反向查询例子

一对多

在 models.py 上定义:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Province(models.Model):
    name = models.CharField(max_length=32)

    def __str__(self):
        return self.name


class City(models.Model):
    name = models.CharField(max_length=32)
    pro = models.ForeignKey("Province", to_field='id', on_delete=models.CASCADE)

    def __str__(self):
        return self.name

执行语句生成数据库

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python manage.py makemigrations

python manage.py migrate

修改 urls.py 添加一个url

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    path('test.html', views.test),

在 views.py 上添加

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from app01 import models

def test(req):
    # 添加数据
    # models.Province.objects.create(name='河北')
    # models.Province.objects.create(name='广东')
    # models.Province.objects.create(name='山东')
    # models.City.objects.create(name='东莞', pro_id=2)
    # models.City.objects.create(name='深圳', pro_id=2)
    # models.City.objects.create(name='惠州', pro_id=2)
    # models.City.objects.create(name='河源', pro_id=2)
    # models.City.objects.create(name='泰安', pro_id=3)
    # models.City.objects.create(name='青岛', pro_id=3)
    # models.City.objects.create(name='济南', pro_id=3)
    # models.City.objects.create(name='张家口', pro_id=1)
    # models.City.objects.create(name='邢台', pro_id=1)

    # 正向查找(具有外键字段的)
    v = models.City.objects.values('id', 'pro__city', 'pro__city__name', 'pro__name')
    print(v)
    # 截取一部分结果: {'pro__name': '河北', 'pro__city__name': '张家口', 'id': 8, 'pro__city': 8}......

    # 反向查找
    l = models.Province.objects.values('id', 'name', 'city__name')
    print(l)
    # 截取一部分结果: {'id': 1, 'name': '河北', 'city__name': '张家口'} , {'id': 1, 'name': '河北', 'city__name': '邢台'}....

    # 获取 province 所有的值
    pro_list = models.Province.objects.all()
    print(pro_list)
    # 结果:<QuerySet [<Province: 河北>, <Province: 广东>, <Province: 山东>]>

    # 获取所有 省份 并且 城市id 都小于5的值
    for item in pro_list:
         print(item.id, item.name, item.city_set.filter(id__lt=5))
    
    # 获取第一个省份和其所有的城市
    print(pro_list[0])
    print(pro_list[0].city_set.all())
    # 结果:
    # 河北
    # <QuerySet [<City: 张家口>, <City: 邢台>]>

    return HttpResponse('ok')

多对多

在 models.py 上定义:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Book(models.Model):
    name = models.CharField(max_length=32)


class Author(models.Model):
    name = models.CharField(max_length=32)
    m = models.ManyToManyField('Book')

执行语句生成数据库

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python manage.py makemigrations

python manage.py migrate

在 views.py 上添加

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def test(req):
    # 正向查找,获取 Author id 为1 的所有著作
    obj = models.Author.objects.get(id=1)
    l = obj.m.all()
    for item in l:
        print(item.id, item.name)

    # 反向查找,获取 著作为 1 的作者
    obj = models.Book.objects.get(id=1)
    m = obj.author_set.all()
    for item in m:
        print(item.id, item.name)

    return HttpResponse('ok')

插入数据 author: book: author_m:

运行结果:

添加数据,进行查询操作 修改 views.py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    # 或者作者和其对应的所有著作
    author_list = models.Author.objects.all()
    for author in author_list:
        print(author.name, author.m.all())

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    # 通过第三张表 m 来查询数据
    author_list = models.Author.objects.values('id', 'name', 'm', 'm__name')
    for item in author_list:
        print(item['id'], item['name'], '书籍ID:', item['m'], item['m__name'])

第三张表中添加一个对应关系

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    # 增加
    obj = models.Author.objects.get(id=1)
    obj.m.add(5)
    obj.m.add(4, 5)
    obj.m.add(*[4, 5])
    
    # 删除
    obj.m.remove(5)
    obj.m.remove(4, 5)
    obj.m.remove(*[4, 5])

    # 清空
    obj.m.clear()

    # 更新
    obj.m.set([1, 2, 3])

    # 添加
    obj = models.Book.objects.get(id=1)
    obj.author_set.add(1)
    obj.author_set.add(1, 2, 3, 4)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/05/10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
无需点击,通过qq的xml卡片自动获取对方ip
因为不是很会php,就到网上找了个找,发现需要用到如下几个函数:getenv('HTTP_CLIENT_IP')getenv('HTTP_X_FORWARDED_FOR')getenv('HTTP_X_FORWARDED')getenv('HTTP_FORWARDED_FOR')getenv('HTTP_FORWARDED')以及变量:_SERVER['REMOTE_ADDR']_SERVER['HTTP_REFERER']
Y5neKO
2022/01/13
8K2
无需点击,通过qq的xml卡片自动获取对方ip
PHP获取ip地址
老猫-Leo
2023/12/11
6120
黑客手段之一张照片就可能暴露你的基本信息
你能想象得到,你的信息的丢失可能是一张照片导致的吗?你能想象,我们只用你的一张照片就可以知道你的具体位置,以及你手机的基本信息吗?你能想象得到,我们自己也可以获取到图片上的信息吗?
大家一起学编程
2021/03/29
1.8K0
linux 下根据域名获取IP地址
在linux操作系统下,根据域名获取IP地址,比较简单的有以下两种方法,都是使用linux基础命令实现的。 两种方法各有优缺点,可以自行选用,不过我自己使用的第一种方法,比较灵活。
若海
2022/12/06
11.8K0
1--安卓网络编程之获取IP地址
关于IP 1.IP 网际协议地址(Internet Protocol Address) 2.是TCP/IP协议族中网络层的协议 3.互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来
张风捷特烈
2018/10/15
2.4K0
1--安卓网络编程之获取IP地址
PHP怎么获取邮件是否已被查看阅读等信息
在发送邮件的功能当中难免会有一些需要统计谁在什么时候查看了邮件,是否被对方阅读等等的需求
沈唁
2019/05/22
1.7K0
获取IP地址工具类
该工具类可以获取请求的ip地址 import javax.servlet.http.HttpServletRequest; import java.net.InetAddress; import java.net.UnknownHostException; /** * @create: 2022/3/29 * @author: Tony Stark */ public class IpUtils { /** * 获取客户端IP * * @param reques
暴躁的程序猿
2022/04/08
2.2K0
gps定位 | 一张照片是怎么出卖你的?
获取你的信息,也许只差一张照片 晒图有风险,分享需谨慎 夏天是露腿露腰秀身材的季节 很多小姐姐都会自拍 当然,还会拍花拍云拍世界 从相片可以查出哪些信息? 拍摄日期 GPS定位数据等等 拍摄设备
纯洁的微笑
2018/07/20
9050
通过邮件发送图片获取某人IP地址的简单方法
有一个十分常见的渗透测试场景: 那就是我们需要获取某人的IP地址。 比如系统管理员所在的白名单IP。
HACK学习
2019/08/07
4.2K0
通过邮件发送图片获取某人IP地址的简单方法
解决cropperjs文件重复上传同一张照片没反应问题
之前图片上传的插件用的是,基于cropper.js的图片上传和裁剪: https://www.jianshu.com/p/f9986bd52ec6,现在考虑到一个用户体验的问题,但上传一张图片之后,发现裁剪的并没有自己想象中的好,再继续选择同一张图片进行二次裁剪,这个时候,就不会出现裁剪框,只有更换另外一张新的图片才行。
王小婷
2019/08/02
1.4K0
android获取Mac地址和IP地址
(1)设备开通Wifi连接,获取到网卡的MAC地址(但是不开通wifi,这种方法获取不到Mac地址,这种方法也是网络上使用的最多的方法)
程思扬
2022/01/10
9.5K0
PHP获取用户ip地址
本篇文章主要介绍PHP获取ip地址的方法,感兴趣的朋友参考下,我的是 Typecho 博客系统,可以在 functions.php 中添加方法,最后在想显示的位置调用 <?php echo getip
qiangzai
2021/12/21
2.8K0
PHP获取用户ip地址
z-blog网站cdn加速后获取用户真实IP地址的方法
前几天发过一篇关于PHP获取网站使用cdn后的用户真实的IP地址的方法,然后就有群里的小伙件单独来问,如果使用z-blog建站并使用cdn加速的话是如何获取用户的真实IP地址呢?那么今天就交大家一个简单的方法。
雾海梦曦
2022/11/14
2K0
z-blog网站cdn加速后获取用户真实IP地址的方法
centos7配置IP地址
有关于centos7获取IP地址的方法主要有两种,1:动态获取ip;2:设置静态IP地址
庞小明
2019/05/25
1.7K0
什么是ip地址
**概况**:每一台设备都需要一个IP地址来进行区分标识,而IP地址中又有分为公网ip和私网ip,公网IP地址用于在互联网上可访问的设备。私有IP地址主要用于内部网络。
泽霖
2023/11/11
4410
Python获取本机所有IP地址
众所周知,Python标准库socket中有可以获取本机IPV4地址的方法,下面是网上非常常见的一种用法: >>> import socket >>> hostname = socket.gethostname() >>> hostname 'DESKTOP-I734J3O' >>> socket.gethostbyname(hostname) '192.168.0.103' 上面的代码在Windows下运行良好,但是无意中发现在Mac系统下运行不正常,返回的是本机回环地址127.0.0.1,而不是真正的I
Python小屋屋主
2018/04/16
4.2K0
python获取本机IP、mac地址、计
在python中获取ip地址和在php中有很大不同,在php中往往比较简单。那再python中怎么做呢?我们先来看一下python 获得本机MAC地址:import...
py3study
2020/01/10
3.9K0
巧用社工方式获取好友IP地址
常在水边走,哪有不湿鞋的道理。一不小心就会上当受骗,当我们上当受骗后第一时间想到的是怎样获取骗子的个人信息。而这里QQ便是我们骗子的联系媒介。
逍遥子大表哥
2021/12/18
1.6K0
巧用社工方式获取好友IP地址
Python获取本机网卡的MAC地址、IP地址和路由表
1、windows下: Python标准库socket中有可以获取本机IPV4地址的方法,下面是网上非常常见的一种用法:
matinal
2023/10/13
2.1K0
SpringBoot获取访问接口设备的ip地址以及设备类型
可以看到基本上日志这一块都是会显示访问设备的ip地址的,所以自己今天也是尝试了一下,试了一下,发现还是比较简单的,中间也出现了一些小的问题,我也会在下面提到.希望能够对你有帮助.
萌萌哒的瓤瓤
2021/01/13
5.1K0
SpringBoot获取访问接口设备的ip地址以及设备类型
相关推荐
无需点击,通过qq的xml卡片自动获取对方ip
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档