前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >五、Django基于对象的跨表查询

五、Django基于对象的跨表查询

作者头像
Dreamy.TZK
发布2020-04-09 14:46:22
1.2K0
发布2020-04-09 14:46:22
举报
文章被收录于专栏:小康的自留地小康的自留地

六、基于对象的跨表查询

正向与反向查询

关键在于ForeignKey字段写的位置。例如下面这段代码,

关系属性(字段)写在哪个类(表)里面,从当前类(表)的数据去查询它关联类(表)的数据叫做正向查询,反之叫做反向查询

  1. Publish查询Book的内容就是反向查询
  2. Book查询Publish的内容就是正向查询
5.png
5.png
代码语言:javascript
复制
class Publish(models.Model):
    name=models.CharField( max_length=32)
    city=models.CharField( max_length=32)
    email=models.EmailField()  #charfield -- asdfasdf
    def __str__(self):
        return self.name

#书籍表
class Book(models.Model):
    nid = models.AutoField(primary_key=True)
    title = models.CharField( max_length=32)
    publishDate=models.DateField()
    price=models.DecimalField(max_digits=5,decimal_places=2)  #decimal(16,2)
    publishs=models.ForeignKey(to="Publish")
    authors=models.ManyToManyField(to='Author',)

    def __str__(self):
        return self.title

一对一

正向查询的例子为 已知用户名,查询用户的电话号码。反向查询例子反之。

正向查询

正向查询靠对象,取到数据对象后,通过操作符对外键操作,就能拿到外键的对象,从而取到内容

代码语言:javascript
复制
author_obj = models.Author.objects.filter(name='admin').first()
result = author_obj.authorDetail.telephone

反向查询

查到对象后,通过小写的表名来获取另一个表的属性

代码语言:javascript
复制
author_detail_obj = models.AuthorDetail.objects.get(telephone='213')
result = author_detail_obj.author.name

一对多

正向查询

与一对一较为类似

代码语言:javascript
复制
book_obj = models.Book.objects.get(title='第二本书')
result = book_obj.publishs.name

反向查询

注意对象调用的是加_set的方法,然后all()即可取出全部内容

代码语言:javascript
复制
publish_obj = models.Publish.objects.get(name="老男人出版社")
result = publish_obj.book_set.all()

多对多

正向查询

代码语言:javascript
复制
book_obj = models.Book.objects.get(title='第一本书')
result = book_obj.authors.all()

反向查询

代码语言:javascript
复制
auth_obj = models.Author.objects.get(name='admin')
result = auth_obj.book_set.all()
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-01-29,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 六、基于对象的跨表查询
    • 正向与反向查询
      • 一对一
        • 正向查询
        • 反向查询
      • 一对多
        • 正向查询
        • 反向查询
      • 多对多
        • 正向查询
        • 反向查询
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档