咨询电话:
15628812133
21
2023/06

Django框架使用ORM查询结果如何包含附表中的字段内容

发布时间:2023-06-21 17:26:43
发布者:已经写了
浏览量:
0

在使用PythonDjango框架进行web开发的时候,会有很多数据库方面的写入,查询等操作,在操作数据库的时候,我们可以通过编辑SQL语句进行查询数据库,也可以使用Django ORM(Object-Relational Mapping,对象关系映射)来进行数据库操作,Django ORM 是一个使用 Python 语言编写的库,可以使得开发者通过面向对象的方式操作关系型数据库。

使用Django ORM相对写sql语句执行数据库操作,最大的优点就是不用写很长的代码,只需要调用对象就可以对数据库进行查询等操作,但是相对于写SQL语句,对于刚开始使用Django ORM的人来说,可能很多地方用的不是很明白使用起来就会生涩很多。

假设你有两个表,一个是 orders 表,另一个是 order_details 表,order_details 表包含一个 order_id 字段,与 orders 表中的 id 字段关联。你可以使用 Django 的 ForeignKey 字段来定义这个关联。如果你想在 Django 中查询一个表,并且想显示该表中关联的附加表的内容,可以使用 Django 的关联表功能。

 正常的查询语句是这样的:

    orders.objects.get(id=1)

但是这样的查询结果,只有主表orders中的字段没有附表中的字段,但是我们又需要附表中的信息应该怎么办呢,不熟悉的就只能用本方法,在通过id去查询附表

    orders_details.objects.get(id=1)

这样的查询就会进行两次查询,代码量也增加了,并没有达到预想中的效果,这个时候我们应该如何查询附表中的内容呢?

其实我们可以直接用关联的外键就可以将附表中的信息获取过来,可以通过values方法

    orders.objects.get(id=1).values('order_id__names')

获取到得结果中就会有附表中的信息,但是字段的名称成了order_id_names,不太美观,有强迫症的表示受不了

这个时候我们可以通过另外的方法,在获取到附表字段的同时,对字段名重命名

    orders.objects.annotate(details_name=F('receive_uid__name')).get(id=1)

这样就可以在查询列结果里查询到附表的name,并且键名为details_name看起来更顺眼了

下面是我们项目中的一些代码段可以用来借鉴

image.png

关键词:
返回列表