Ожидался список элементов, но получен тип queryset
Я хочу сделать get api, который возвращает json, содержащий 3 таблицы. Эти 3 массива должны содержать список различных объектов. Я хочу получить в качестве результата:
{
"array_1": [{"id", "name"}, {"id2", "name2"}],
"array_2": [{"id", "date"}, {"id2", "date2"}],
"array_4": [{"id", "otherfield"}, {"id2", "otherfield2"}],
}
Мои сериализаторы:
class Object1Serializer(serializers.ModelSerializer):
class Meta:
model = Object1
fields = ['id', 'photo',]
class Object2Serializer(serializers.ModelSerializer):
class Meta:
model = Object2
fields = ['id', 'name', 'date']
class Object3Serializer(serializers.ModelSerializer):
class Meta:
model = Object3
fields = ['id', 'file']
class ObjectsSerializer(serializers.Serializer):
object_1 = Object1Serializer(many=True, required=False)
object_2 = Object2Serializer(many=True, required=False)
object_3 = Object3Serializer(many=True, required=False)
Мое мнение:
class getObjectAPIView(APIView):
permission_classes = [permissions.IsAuthenticated]
serializer_class = ObjectsSerializer
def get(self, request, machine_pk):
user = request.user
if not machine_pk:
return Response("Missing id machine field", status=status.HTTP_400_BAD_REQUEST)
if not Machine.objects.filter(pk=machine_pk).exists():
return Response("Machine not found", status=status.HTTP_404_NOT_FOUND)
if not user.is_staff and not user.groups.filter(name="frigo").exists():
return Response("You are not allowed to access this machine", status=status.HTTP_403_FORBIDDEN)
machine = Machine.objects.get(pk=machine_pk)
object1 = Object1.objects.filter(machine=machine)
object2 = Object2.objects.filter(machines=machine)
object3 = Object3.objects.filter(client=machine.client)
json_response = {
"object1": object1.values(),
"object2": object2.values(),
"object3": object3.values(),
}
serializer = ObjectsSerializer(data=json_response)
serializer.is_valid(raise_exception=True)
return Response(serializer.data, status=status.HTTP_200_OK)
Но я получил ошибку:
{
"object1": {
"non_field_errors": [
"Expected a list of items but got type \"QuerySet\"."
]
},
"object2": {
"non_field_errors": [
"Expected a list of items but got type \"QuerySet\"."
]
},
"object3": {
"non_field_errors": [
"Expected a list of items but got type \"QuerySet\"."
]
}
}
Я попробовал с serializer.is_valid(raise_exception=True), я получил json, но со всеми полями.
То есть, например, для объекта_1 у меня в результате все поля объекта, а не то, что я определил в сериализаторе.
Я также пытался преобразовать объекты следующим образом:
json_response = {
"object1": list(object1.values()),
"object2": list(object2.values()),
"object3": list(object3.values()),
}
Но я получил другую ошибку: The submitted data was not a file. Check the encoding type on the form