📅  最后修改于: 2023-12-03 15:38:15.812000             🧑  作者: Mango
在Django REST Framework中,我们可以使用 get_object
方法来获取单个对象。常规的做法是在URL中传递ID参数,然后使用 get_object
方法查询该对象。然而,有时候我们需要传递其他查询参数来检索对象,而这些参数不同于ID。在这种情况下,我们可以使用 query_params
来检索对象。
query_params
是一个字典,包含在URL中传输的查询参数。如果您在URL中使用 ?
字符串将参数附加到URL后面,这些参数就会成为请求的 query_params
的一部分。例如,假设您有以下URL和查询参数:
http://api.example.com/users?username=johndoe&age=30
在这种情况下,query_params
将是以下内容:
{'username': 'johndoe', 'age': '30'}
为了在 get_object
中使用 query_params
,我们可以像下面这样修改代码:
from rest_framework import generics
class UserDetail(generics.RetrieveAPIView):
serializer_class = UserSerializer
lookup_field = 'pk'
def get_object(self):
queryset = self.get_queryset()
# Get the object based on query_params
filter_kwargs = self.request.query_params
obj = queryset.filter(**filter_kwargs).first()
# Raise 404 if object not found
if not obj:
self.raise_exception({'detail': 'Object not found'})
# Check object permissions
self.check_object_permissions(self.request, obj)
return obj
在上面的代码中,我们使用 self.request.query_params
来获取查询参数,然后使用 filter
方法构建查询对象。请注意,我们使用 first
方法而不是 get
方法来返回单个对象。
如果对象不存在,则抛出404错误。
使用 query_params
参数检索对象是Django REST Framework中的一项非常方便的功能。我们可以轻松地使用它来从URL中检索对象,而不仅仅是ID。在 get_object
中使用 query_params
可以让我们更容易地检索需要的对象。