Мне нужно начать говорить, что ни одно из решений, представленных в подобном вопросе, похоже, не работает для меня.Как правильно вставлять сериализаторы в Django REST Framework?
У меня есть две модели
class Building(models.Model):
(...)
address = models.ForeignKey('common.Address', null=True)
class Address (models.Model):
(...)
latlng = models.PointField(null=True)
Я использую Django REST Framework (с расширением addidtional ГИС) сериализаторов сериализовать эти модели:
class BuildingSerializer(serializers.ModelSerializer):
class Meta:
model = Building
class AddressSerializer(serializers.GeoModelSerializer):
class Meta:
model = Address
С умолчанию сериализаторов я получаю JSON выглядит как это:
results": [
{
(...)
"address": 1
}
]
И желаемый JSON будет выглядеть так:
results": [
{
(...)
"address": 1,
"latlng": {
"type": "Point",
"coordinates": [
11.0,
11.0
]
},
},
]
Где latlng это поле с адреса, в здании которого может быть только один.
Используя этот http://www.django-rest-framework.org/api-guide/serializers/#dealing-with-nested-objects броски и ошибки:
Got AttributeError when attempting to get a value for field `latlng` on serializer `BuildingSerializer`.
The serializer field might be named incorrectly and not match any attribute or key on the `Building` instance.
Original exception text was: 'Building' object has no attribute 'latlng'.
Спасибо, что работает отлично! Хотя, у меня есть еще один вопрос. Я использую rest_framework_gis GeoModelSerializer в адресе для сериализации точки как GeoJson. В этом случае мне нужно написать это сам взамен. Я что-то делаю неправильно, или GeoModelSerializer просто не способен сериализовать поля? Я получаю '<Объект точки в 0x7f09332779a0> не является сериализуемым JSON' при попытке вернуть plain latlng с помощью GeoModelSerializer. – user3146472
Вместо этого попробуйте использовать GeoFeatureModelSerializer. –
Он бросает «класс Meta не имеет атрибута« geo_field », который я действительно не знаю, как интерпретировать. – user3146472