问题描述
我的 URL 有 'nutritionist' 查询参数,在这种情况下,它将获得包含 id=1 的营养师的个人资料
/profiles?nutritionist=1
当我尝试像这样测试这种“过滤”时:
def test_get_user_belonging_to_a_nutritionist(self):
response = self.client.get("/profiles?nutritionist=1/",secure=True)
users = CustomUser.objects.filter(nutritionist=1)
serializer = CustomUserDetailsSerializer(users,many=True)
self.assertEqual(response.data,serializer.data)
响应包含 HttpResponsePermanentRedirect 对象,而不是正常响应
如果有帮助,这是我的 Views.py
class GetProfilesViewSet(generics.ListAPIView):
serializer_class = CustomUserDetailsSerializer
def get_queryset(self):
"""
Optionally restricts the returned purchases to a given user,by filtering against a `username` query parameter in the URL.
"""
queryset = CustomUser.objects.all()
nutritionist_id = self.request.query_params.get('nutritionist')
if nutritionist_id is not None:
queryset = queryset.filter(nutritionist=nutritionist_id)
return queryset
我如何测试这个案例?
解决方法
查询参数应在/
之后添加,并与?
开始一起使用。
当有多个查询参数时,使用 &
串联。
所以你的 URL 应该写成 /profiles/?nutritionist=1
。
最后,建议使用查询过滤器 (django-filter) 而不是覆盖 get_queryset
方法。