Условно выбираем сериализатор

У меня есть три модели Django.

class Asset(models.Model):
  name = models.CharField(max_length=255)


class Place(Asset):
  location = PointField()


class Zone(Asset):
  location = PolygonField()

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

Я заинтересован только в обработке одного экземпляра, поэтому нет необходимости обрабатывать ListView и т. Д.

1 ответ

Решение

Вы можете переопределитьget_serializer_classметод в вашем представлении и добавьте логику для выбора правильного сериализатора там.

Согласно документам DRF:

get_serializer_class(self)

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

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

Код:

class MyView(..):
    ...

    def get_serializer_class(self):
        if asset == place: # here add the logic to decide the asset type
             return PlaceSerializer 
        return ZoneSerializer 
Другие вопросы по тегам