Условно выбираем сериализатор
У меня есть три модели 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