Указание пользовательских вложенных объектов в Django Rest Framework ModelSerializer

#python #django #django-rest-framework

#python #django #django-rest-framework

Вопрос:

У меня есть lat, long, указанный в моей базе данных как:

 ...
lat = models.DecimalField(_('Latitude'), max_digits=8, decimal_places=5, null=True, blank=True)
lng = models.DecimalField(_('Longitude'), max_digits=8, decimal_places=5, null=True, blank=True)
...
  

Я хочу, чтобы моя модальная сериализация выглядела как:

 {
  ...
  "location": {
      "lat": ...,
      "long": ... 
  }
  ...
}
  

Как мне этого добиться?

Ответ №1:

Одним из способов является то, что вы можете создать свойство в модели, как показано ниже.

 @property
def location_info(self):
    return dict(
        lat=self.lat,
        lng=self.lng
    )
  

Затем вы можете создать поле dict в своем сериализаторе и указать source в качестве своего свойства. Поскольку это свойство, оно может быть полем только для чтения.

 location = serializers.DictField(source='location_info', read_only=True)