ORM 正反向查询
ORM 正反向查询
在 ORM 查询中,一般分为正向查询和反向查询。至于什么是正向查询和反向查询,还要从表关系说起。
举个简单的例子,就拿图书和出版社来说,一般一个图书只有一个出版社,但是一个出版社一般出版有多个图书,外键关系一般建立在多的一侧,也就是说,外键关系是建立在图书的表模型中的。
而正向查询就是从多的一侧出发,即从图书表出发去查找。举例如下:查找出版社为出版社1
的图书。
obj = models.Book.objects.filter(publisher__name='出版社1')
反向查询则是与之相反,从少的一次出发进行查找。反向查询操作如下:
obj = models.Publisher.objects.get(id=1) # 假设出版社1的id为1
obj.book_set.all()
- 方式一
- 方式二
当设置了related_name
以后就无法使用多的一侧的表名小写_set
这个用法。因为多的一侧的表名小写_set
为默认的,当设置了related_name
以后就会覆盖掉多的一侧的表名小写_set
这个用法法导致无法使用。related_name
就是为了方便反向查询而设置的。