Я пытаюсь получить список пользователей, относящихся к определенной роли. Я использую метод APIView get()
для обработки запросов get
. До сих пор я создал класс ListUser (APIView) , как показано ниже.
class ListUsers(APIView):
def get(self, request, formate=None):
admin_users = User.objects.all()
serilized_data = AdminSerializer(admin_users, many=True)
return Response(serilized_data)
Когда я печатаю admin_users
, он возвращал строковое представление таких объектов -
<QuerySet [<User: User Object (26)>, <User: User Object (27)>, <User: User Object (28)>, <User: User Object (29)>, <User: User Object (31)>]>
и когда я отправляю этот список, чтобы получить AdminSerializer
, он возвращает -
Internal Server Error: /users/list/users/
Traceback (most recent call last):
File "/Users/jeetpatel/Desktop/env/lib/python3.7/site-packages/django/core/handlers/exception.py", line 34, in inner
response = get_response(request)
File "/Users/jeetpatel/Desktop/env/lib/python3.7/site-packages/django/core/handlers/base.py", line 145, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/Users/jeetpatel/Desktop/env/lib/python3.7/site-packages/django/core/handlers/base.py", line 143, in _get_response
response = response.render()
File "/Users/jeetpatel/Desktop/env/lib/python3.7/site-packages/django/template/response.py", line 105, in render
self.content = self.rendered_content
File "/Users/jeetpatel/Desktop/env/lib/python3.7/site-packages/rest_framework/response.py", line 70, in rendered_content
ret = renderer.render(self.data, accepted_media_type, context)
File "/Users/jeetpatel/Desktop/env/lib/python3.7/site-packages/rest_framework/renderers.py", line 103, in render
allow_nan=not self.strict, separators=separators
File "/Users/jeetpatel/Desktop/env/lib/python3.7/site-packages/rest_framework/utils/json.py", line 25, in dumps
return json.dumps(*args, **kwargs)
File "/usr/local/opt/python/Frameworks/Python.framework/Versions/3.7/lib/python3.7/json/__init__.py", line 238, in dumps
**kw).encode(obj)
File "/usr/local/opt/python/Frameworks/Python.framework/Versions/3.7/lib/python3.7/json/encoder.py", line 199, in encode
chunks = self.iterencode(o, _one_shot=True)
File "/usr/local/opt/python/Frameworks/Python.framework/Versions/3.7/lib/python3.7/json/encoder.py", line 257, in iterencode
return _iterencode(o, 0)
File "/Users/jeetpatel/Desktop/env/lib/python3.7/site-packages/rest_framework/utils/encoders.py", line 67, in default
return super().default(obj)
File "/usr/local/opt/python/Frameworks/Python.framework/Versions/3.7/lib/python3.7/json/encoder.py", line 179, in default
raise TypeError(f'Object of type {o.__class__.__name__} '
TypeError: Object of type ListSerializer is not JSON serializable
У меня есть собственный класс менеджера для этой модели одним способом create_user()
. Я использую тот же сериализатор (AdminSerializer()
) для пользователей create
и get
.
Я хочу, чтобы метод get()
взял query_param
и применил его как фильтр, подобный этому -
admin_list = User.objects.all().filter(role = query_param.get('role')).values('first_name', 'last_name', 'email', 'phone_number')
Так выглядит мой сериализатор -
class AdminSerializer(serializers.Serializer):
id = serializers.IntegerField(read_only=True)
email = serializers.EmailField(required=True)
first_name = serializers.CharField(max_length=255, required=True)
last_name = serializers.CharField(max_length=255, required=True)
phone_number = serializers.IntegerField(required=True)
password = serializers.CharField(max_length=255, required=True, write_only=True)
role = serializers.IntegerField(required=True)
is_active = serializers.BooleanField(required=False)
Я хочу -
{
"first_name":"",
"last_name":"",
"email":""
}
Где я ошибаюсь? что мне здесь не хватает?