📅  最后修改于: 2023-12-03 14:54:24.244000             🧑  作者: Mango
在 DRF 中,get_queryset
函数用于返回一个 QuerySet 对象,用于处理请求。有时候,我们需要在 get_queryset
函数中获取 URL 的参数值,以根据参数值对查询集进行筛选或排序。
可以使用 request.query_params
属性来获取 URL 的参数值。例如,如果 URL 是 https://example.com/api/articles?category=python
,则可以在 get_queryset
函数中使用以下代码来获取 category
参数的值:
class ArticleViewSet(viewsets.ModelViewSet):
queryset = Article.objects.all()
serializer_class = ArticleSerializer
def get_queryset(self):
category = self.request.query_params.get('category')
if category:
return self.queryset.filter(category=category)
else:
return self.queryset
在上面的示例中,self.request
包含当前请求的对象,query_params
属性包含 URL 参数的字典。可以使用 get
方法从字典中获取 category
参数的值。如果参数不存在,则返回 None
。
在使用 URL 参数值时,需要注意参数的类型和格式。可以使用 Django 提供的验证器来验证 URL 参数是否符合要求。例如,如果要验证 category
参数是否是数字,则可以使用以下代码:
from django.core.exceptions import ValidationError
class ArticleViewSet(viewsets.ModelViewSet):
queryset = Article.objects.all()
serializer_class = ArticleSerializer
def get_queryset(self):
category = self.request.query_params.get('category')
if category:
try:
category = int(category)
except ValueError:
raise ValidationError('category must be an integer')
return self.queryset.filter(category=category)
else:
return self.queryset
在上面的示例中,try-except
语句用于将 category
参数转换为整数。如果无法转换,则抛出 ValidationError
异常。
在 DRF 中获取 URL 参数值很简单,只需使用 request.query_params
属性即可。可以使用验证器来验证参数是否符合要求。