Значения поля сериализатора на основе запроса

В Haystack у меня есть следующий набор представлений:

      class ArtistSearchViewSet(HaystackViewSet):
    index_models = (Artist,)
    serializer_class = ArtistSearchResultSerializer
    pagination_class = LimitOffsetPagination

Это сериализатор:

      class ArtistSearchResultSerializer(HaystackSerializer):
    class Meta:
        index_classes = (ArtistIndex,)
        fields = (
            "id",
            "name",
        )
        search_fields = ("text",)

Для каждого возвращенного результата поиска я хочу добавить логическое поле, которое указывает, был ли соответствующий исполнитель отмечен текущим пользователем или нет.

Как бы Вы это сделали?

1 ответ

Вы можете определить поле в своем сериализаторе, которое будет вычисляться на месте и возвращаться в ответе, используя SerializerMethodField как таковой:

      class ArtistSearchResultSerializer(HaystackSerializer):
    starred = serializers.SerializerMethodField(read_only=True)
    class Meta:
        index_classes = (ArtistIndex,)
        fields = (
            "id",
            "name",
            "starred",
        )
        search_fields = ("text",)

    def get_starred(self, obj):
        # Your code here
        return field_value

The def get_starredметод будет вызываться каждый раз, когда вызывается сериализатор, и будет выполнять ваш код и возвращать значение поля, которое вы хотите предоставить.

Другие вопросы по тегам