Значения поля сериализатора на основе запроса
В 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
метод будет вызываться каждый раз, когда вызывается сериализатор, и будет выполнять ваш код и возвращать значение поля, которое вы хотите предоставить.