Я создаю API с использованием DRF и хочу отправить JSONResponse, который будет содержать список всех пользователей (из модели пользователя django) и доступные варианты для нескольких полей в качестве диктанта.
Я пыталсячтобы создать GenericAPIView с набором запросов всех активных пользователей и в сериализаторе я попытался вернуть выбор полей и список пользователей, но результат содержит опции полей вместе с каждым объектом пользователя. Я хочу сохранить все данные пользователей под ключом "user_list" и опциями полей под "field1_choices", "field2_choices".
GenericAPIView:
class TicketPropertiesView(generics.GenericAPIView):
authentication_classes = [
CsrfExemptSessionAuthentication,
BasicAuthentication]
permission_classes = [IsAuthenticated]
serializer_class = UserPropertiesSerializer
def get(self, *args, **kwargs):
serializer = TicketPropertiesSerializer(data = User.objects.filter(is_active = True), many = True)
serializer.is_valid()
return JsonResponse(serializer.data, safe = False)
Сериализатор:
class UserPropertiesSerializer(serializers.ModelSerializer):
user_list = serializers.SerializerMethodField()
field_1_choices = serializers.SerializerMethodField()
field_2_choices = serializers.SerializerMethodField()
FIELD_1_MAP = FIELD_1_CHOICES
FIELD_2_MAP = FIELD_2_CHOICES
def get_user_list(self, obj):
queryset = User.objects.filter(is_active = True)
user = []
for obj in queryset:
user.append({
"id": obj.id,
"username": obj.username,
"first_name": obj.first_name
})
return user
def get_field_1_choices(self, *args):
field1_choices = []
for i in self.FIELD_1_MAP:
field1_choices.append({"id": i[0], "choice": i[1]})
return field1_choices
def get_field_2_choices(self, *args):
field2_choices = []
for i in self.FIELD_2_MAP:
field2_choices.append({"id": i[0], "choice": i[1]})
return field2_choices
class Meta:
model = User
fields = ('user_list', 'field_1_choices', 'field_2_choices')
Формат результата:
[{
"user_list": {id:1,...},
"field_1_choices": [{"choice": new}, ...],
"field_2_choices": [{"choice": normal}, ...]
},
{
"user_list": {id:2,...},
"field_1_choices": [{"choice": new}, ...],
"field_2_choices": [{"choice": normal}, ...]
},
]
Вместо ожидаемого вывода должно быть:
{
"user_list": [{"id":1,...}, {"id":2,...}, {"id":3,...}],
"field_1_choices": [{"choice": new}, ...],
"field_2_choices": [{"choice": normal}, ...]
}