2

У меня есть три модели 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 docs:

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 
+0

Спасибо за этот ответ. – Helgi

Смежные вопросы