快上网专注成都网站设计 成都网站制作 成都网站建设
成都网站建设公司服务热线:028-86922220

网站建设知识

十年网站开发经验 + 多家企业客户 + 靠谱的建站团队

量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决

如何了解DjangoORM操作

本篇内容主要讲解“如何了解Django ORM操作”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何了解Django ORM操作”吧!

成都创新互联公司是一家专业的成都网站建设公司,我们专注成都网站建设、网站制作、网络营销、企业网站建设,友情链接一元广告为企业客户提供一站式建站解决方案,能带给客户新的互联网理念。从网站结构的规划UI设计到用户体验提高,创新互联力求做到尽善尽美。

查询操作

对象.外键字段

比如,我们拿到了一个书的信息,我们可以这样打印他的信息。

代码

book = models.Book.objects.filter(title="<<大明帝国>>").first() print(f"book类型:{type(book)}") print(f"id:{book.id}") print(f"书名:{book.title}") print(f"价格:{book.price}") print(f"书名:{book.PublishDate}") print(f"出版社:{book.publish}") # 外键字段

执行结果

如何了解Django ORM操作

注:蓝色为外键字段

不知道你有没有疑问,为什么book.publish会把邮电出版社打印出来。

这个原因主要在于外键对象的__str__方法。

如何了解Django ORM操作

就是因为我Publish返回的是self.title,所以才能打印出来邮电出版社,如果我想打印出版社联系方式咋办?

代码

print(f"出版社类型:{type(book.publish)}")  #  # book.publish已经是models.Publish对象,所以可以自由调里面的属性 print(f"出版社电话:{book.publish.phone},")

执行结果

如何了解Django ORM操作

总结

对象.外键字段拿到的就是外键字段对象,直接就可以通过对象.外键字段.外键属性获取具体值。

反向查询(表名__set.all())

上述我们是通过正向查询的方式查询到了书对应的出版社具体信息。

但是如果说,我们拿到的就是一个出版社名呢?

通常情况下,你可能会这样!

代码

# 查询邮电出版社 publish_obj = models.Publish.objects.filter(title="邮电出版社").first() # 获取出版社id publish_id = publish_obj.id # 查询publish_id为出版社id的 book_list = models.Book.objects.filter(publish_id=publish_id) print(book_list)

执行结果

如何了解Django ORM操作

其实,还有一种方法:通过一个对象,反向查多个对象。

代码

publish_obj = models.Publish.objects.filter(title="邮电出版社").first() book_list = publish_obj.book_set.all() print(book_list)

执行结果

如何了解Django ORM操作

双下划线跨表查询

还是上述这个问题,通过一个出版社名,查找属于这个出版社的图书。

基于双下划线的跨表查询,理论是更简单的!

如何了解Django ORM操作

注:可以看到还有__contains等其他filter条件查询,通过__跨表依然是可以通用的。

代码

book_list = models.Book.objects.filter(publish__title="邮电出版社") print(book_list)

执行结果

如何了解Django ORM操作

连续跨表

__不仅可以进行跨一张表,还能跨多张表。

以图书Many作者表为例,根据出版社查询图书和作者多对多的信息。

代码

ret = models.BookManyAuthor.objects.filter(book__publish__title="邮电出版社") print(ret)

跨了book表又跨了publish表

如何了解Django ORM操作

执行结果

如何了解Django ORM操作

values

有时候,我们可能只需要一些特定的列,这时候使用values即可。

代码

# 语法 book_list = models.Book.objects.all().values("列1","列2",...) # 示例 book_list = models.Book.objects.all().values("title","price") print(book_list)

代码

如何了解Django ORM操作

values返回的值有点像列表套字典,但是其实本质还是QuerySet类型。

values_list

values_list和values功能一样,都是取相关的列,但是返回的类型格式不一样。

代码

book_list = models.Book.objects.all().values_list("title","price") print(book_list)

执行结果

如何了解Django ORM操作

这个有点像列表套元组,但是其实本质还是QuerySet。

related_name

related_name通常用于反向查询时,替换<表名>_set。

原方式

models.py

如何了解Django ORM操作

代码

# 查询邮电出版社 publish = models.Publish.objects.filter(title="邮电出版社").first() print(publish) # 反向一对多 book_list = publish.book_set.all() print(book_list)

执行结果

如何了解Django ORM操作

别名方式

models.py

如何了解Django ORM操作

代码

# 查询邮电出版社 publish = models.Publish.objects.filter(title="邮电出版社").first() print(publish) # 反向一对多 book_list = publish.book_list.all() print(book_list)

执行结果

如何了解Django ORM操作

filter().filter()...

上文我们说过,是支持多个filter的,filter(<条件>).filter(<条件>)...

这种情况通常用于不确定筛选条件,但是多层筛选的情况下。

代码

# 举例而已,后面filter里面可以是其他 或 的条件 book1 = models.Book.objects.filter(title="<<大明帝国>>").filter(price="99") # 效果同上 book2 = models.Book.objects.filter(title="<<大明帝国>>",price="99") print(book1) print(book2)

执行结果

如何了解Django ORM操作

到此,相信大家对“如何了解Django ORM操作”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!


网站题目:如何了解DjangoORM操作
当前链接:http://6mz.cn/article/pcdesj.html

其他资讯