С помощью django -rest-framework я создаю REST API, где я могу получать доступ и изменять информацию о людях в городе. Люди принадлежат городу и поэтому имеют внешний ключ, связанный с моделью города.
С помощью приведенного ниже кода я сериализую объект Person вместе с объектом City, в результате чего получается вложенный JSON. Однако, поскольку это упрощенный пример кода, а в реальном проекте гораздо больше данных и полей, а вложение углубляется, в конечном итоге он значительно замедляет API, особенно при доступе ко всем записям Person.
Is есть ли способ указать, хочу ли я включить вложенную сериализацию или просто хочу модель мелкого человека с идентификаторами первичного ключа?
class City(models.Model):
name = models.CharField(max_length=255, unique=True)
class Person(models.Model):
name = models.CharField(max_length=384)
city = models.ForeignKey(City, on_delete=models.CASCADE)
class CitySerializer(serializers.ModelSerializer):
class Meta:
model = City
fields = '__all__'
class PersonSerializer(serializers.ModelSerializer):
city = CitySerializer()
class Meta:
model = Person
fields = '__all__'
class PersonViewSet(viewsets.ModelViewSet):
queryset = Person.objects.all()
serializer_class = PersonSerializer
urls.py:
router = routers.DefaultRouter()
router.register('people', PersonViewSet)
запрашивая данные: curl -i -H "Принять: application / json" 'localhost: 8000 / people'
JSON :
[
{
"id": 1,
"name": "Simen",
"city": {
id: 1,
name: "Oslo"
}
},
{
"id": 2,
"name": "Roar",
"city": {
id: 2,
name: "Trondheim"
}
}
]