是Django,是queryset的过滤器和关系管理器一样吗?

时间:2014-12-25 06:22:14

标签: django django-models django-views

在我的views.py中,我希望拥有该客户端所有竞赛的查询集,并在竞争对手的客户领域使用related_name 我想我有两种方法: 假设这两个模型是在views.py中导入的 1。resultSet=Competition.objects.filter(host=client) 2。resultSet=client.myCompetition

我有两个问题:

1)在我的view.py中,我实际上是尝试第二种方式,我写道:client0=request.user.client_profile,而django说django相关不存在。

2)我想知道如何在Django中实现关系管理器,是吗? 1))一些指针存储在关系管理器中,因此它可以更快地访问数据 要么 2))扫描数据库并基本上与"过滤"?

相同

我正在使用mysql。

谢谢!

1 个答案:

答案 0 :(得分:0)

在Django中,每个Model类都有一个Manager实例objects,这些方法通常返回一个QuerySet实例(并非所有Manager的方法都返回QerySet)。 QuerySet是一个惰性对象,负责创建在您实际请求数据时发送到底层数据库的查询(SQL)。因此,Manager只是初始化正确QuerySet的助手。

关于相关字段,该机制的工作方式相同,而不是将一个帮助程序与模型关联,您有一个与ModelField关联的帮助程序。关键是总是得到一个QuerySet。

只要语义相同,使用一个或另一个通常只有一点味道(可能是代码可读性),但是如果你关心性能,你总是可以检查生成的QuerySet实际发布到数据库的内容通过印刷

print my_query_set.query

当您尝试访问数据时,您将拥有将发送到数据库的SQL。