不仅仅在视图中的反向查询

以往使用Django提供的ORM功能都是通过在视图操作模型来实现数据库的增删改查,在这个过程中,带有外键约束的那一方为正方,正方关联的那一方为反方,通过外键去访问关联对象就是正向查询,而不带外键的那一方去访问关联对象就是反向查询,当然这些都是很基本的开发技能.

1
2
3
4
5
6
class List(models.Model):
pass

class Item(models.Model):
text = models.TextField(default='')
list = models.ForeignKey(List, default=None)
1
2
3
4
5
6
# 正向查询
item = Item.objects.all().first()
list_ = item.list.title
# 反向查询
list_ = List.objeacts.get(id=1)
item = list_.item_set.all()

这种查询不仅仅可以在视图中进行,Django的模板引擎让我可以在模板中同样能够进行ORM操作,不仅仅局限在view当中

1
2
3
{% for item in list.item_set.all %}           
{{ item.text }}
{% endfor %}

这样大大提高的查询数据的灵活性,不把ORM操作局限在某一块地方.