Sub*_*bbu 6 python django django-queryset django-rest-framework
我是 DJango 和 DRF 的新手,并被要求管理一些与 DJango/DRF 相关的代码。经过大量搜索,我仍然无法找到有关 filter_queryset 如何工作以及如何与不同参数一起使用的完整示例。
在某些地方,我看到它像下面这样使用,
self.filter_queryset(queryset)
Run Code Online (Sandbox Code Playgroud)
在其他地方,它与一些参数一起使用。如果有人可以解释基本原理,例如如何以及何时使用它,什么是因变量(lookup_field、filter_backends 等)和参数以及如何设置它们,那将会很有帮助。
我搜索了很多,也浏览了文档。如果我错过了任何文档,请告诉我。
的filter_queryset()- (源代码)是其在最初实施的方法GenericAPIView- (DRF DOC)类。
Run Code Online (Sandbox Code Playgroud)def filter_queryset(self, queryset): """ Given a queryset, filter it with whichever filter backend is in use. You are unlikely to want to override this method, although you may need to call it either from a list view, or from a custom `get_object` method if you want to apply the configured filtering backend to the default queryset. """ for backend in list(self.filter_backends): queryset = backend().filter_queryset(self.request, queryset, self) return queryset
我认为从文档字符串中可以清楚地看到该方法的功能。
“......在其他地方,它与一些参数一起使用”
所述views的filter_queryset()方法仅采用一个参数,它是queryset要被过滤。
但是,filter-backends'filter_queryset()方法需要三个参数,它们是request,queryset和它view本身。
什么是过滤器后端?
Filterbackends 是帮助我们使用复杂查找和其他一些东西过滤查询集的类。
DRF 很少有内置后端,可以在这里找到。DRF 官方文档建议使用django-filter包进行高级过滤。
过滤器后端如何工作?
看看DjangoFilterBackend类的源代码和它的方法......它的filter_queryset(...)方法在过滤过程中起着关键作用。
我建议您阅读django-filter的文档,以通过更多示例了解相同的用法。
通过定义filterset_class,您可以更好地控制过滤过程(例如提供lookup_expr等)
| 归档时间: |
|
| 查看次数: |
6319 次 |
| 最近记录: |