前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python学习(一)django orm多表查询

python学习(一)django orm多表查询

作者头像
一笠风雨任生平
发布2019-08-02 11:07:07
5600
发布2019-08-02 11:07:07
举报
文章被收录于专栏:服务化进程服务化进程

###多表查询 一般的多表查询都是直接建立一个多对多关系

代码语言:javascript
复制
class Books(models.Model):
    users = models.ManyToManyField(User, related_name='t_books', blank=True)
    name = models.CharField(max_length=100)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

比如说上面的额代码,这样就会创建一个book和user的关联表,但是有些复杂场景,关联表中不仅仅有两个表的主键, 还有一些其他个性化属性,这个时候就需要单独写一个class来声明多对多关系,如下

代码语言:javascript
复制
class Assets(models.Model):
    users = models.ForeignKey(User, related_name='t_assets', null=True, on_delete=models.CASCADE)
    books = models.ForeignKey(Policy, related_name='t_assets', on_delete=models.CASCADE)
	host = models.ForeignKey(Host, related_name='t_assets', null=True, on_delete=models.CASCADE)
    title=models.CharField(max_length=100)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

class Books(models.Model):
    name = models.CharField(max_length=100)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

这个时候列举一些查询场景

1、根据books中的属性来查询用

代码语言:javascript
复制
Books.objects.filter(name="aaa")

2、根据assets中的title来查询books,这个时候就需要用到related_name属性来查询,并且需要使用双下划线

代码语言:javascript
复制
Books.objects.filter(t_assets__title="aaa")
#模糊查询
Books.objects.filter(t_assets__title__icontains="aaa")

也可以查询assets然后反向查询

代码语言:javascript
复制
_books=list()
aa=Assets.objects.filter(title="aaa").all()
for a in aa:
   _books.append(a.books)

3、根据user类中的name查询books

代码语言:javascript
复制
Books.objects.filter(t_assets__users__name="aaa")

4、多字段模糊匹配,这个时候就需要用到django提供的Q类来封装查询语句 Books.objects.filter(Q(name__icontains=search) | Q(t_assets__title__icontains=search) | Q( t_assets__users__name__icontains=search))

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档