Man*_*hit 5 python django django-rest-framework drf-queryset
我是 DRF 的新手。我在http://www.django-rest-framework.org/api-guide/filtering/#filtering-and-object-lookups上浏览了过滤查询集的示例
此链接包含有关查询集过滤以及 DjangoFilterBackend 的描述。据我所知,它们服务于相同的目的。但尚不清楚何时使用其中任何一种。在某些情况下,同时使用 queryset 和 filter_backends :-
class UserListView(generics.ListAPIView):
queryset = User.objects.all()
serializer_class = UserSerializer
filter_backends = (filters.OrderingFilter,)
ordering_fields = ('username', 'email')
Run Code Online (Sandbox Code Playgroud)
谁能告诉我,这两者之间有什么区别?必须使用这两者中的哪一种,在什么情况下,我们必须优先选择其中一种?
提前致谢
DjangoFilterBackend 提供了现成的过滤实现。将其视为 api_view 与通用 ListApiView 的比较。过滤后端允许您只需编写一行代码(即启用过滤后端)即可实现各种过滤(搜索、排序等)。您可以通过不使用任何过滤器后端并使用查询参数来过滤自己来获得相同的结果。
稍后可能看起来像这样:
for q_key in request.query_params.keys():
if q_key == 'from_ts':
from_timestamp = int(request.query_params[q_key])
elif q_key == 'to_ts':
to_timestamp = int(request.query_params[q_key])
elif q_key == 'location':
location_id = (request.query_params[q_key])
elif q_key == 'from_rating':
rating_low = int(request.query_params[q_key])
elif q_key == 'to_rating':
rating_high = int(request.query_params[q_key])
Run Code Online (Sandbox Code Playgroud)
并使用这些参数进行过滤:
snippets = ParResponse.objects.filter(
device__location__id=location_id,
owner_user=request.user,
timestamp__gte=end_date,
timestamp__lte=from_date,
overall_rating__lte=rating_high,
overall_rating__gte=rating_low,
).order_by('-timestamp')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5286 次 |
| 最近记录: |