как вернуть вложенный json с помощью платформы django rest

#python #django #django-rest-framework

Вопрос:

Я пытаюсь создать REST API с помощью django. вот мой models.py и serializers.py.

models.py

 from django.db import models

class Person(models.Model):

    city = models.CharField(max_length=100)
    dob = models.DateField(editable=True)
    personName = models.CharField(max_length=100)

    class Meta:
        ordering = ['-dob']
 

serailizers.py

 from rest_framework import serializers
from .models import Person

class PersonSerializer(serializers.ModelSerializer):
 
    class Meta:
        model = Person
        fields = [ 'id', 'city', 'dob', 'personName']
 

Вот мой api — http://127.0.0.1:8000/api/city/Sidney/. Я пытаюсь получить данные по названию города.

Я получаю json в формате ниже.

 [{
  "id": 1,
  "city": "Sidney",
  "personName": "Giles",
  "dob": "2011-02-02"
},
{
  "id": 5,
  "city": "Paulba",
  "personName": "Sidney",
  "dob": "2016-07-16"
}]
 

Но я хочу, чтобы json был в формате, показанном ниже —

 [
  {
    "id": 123,
    "city": "Sidney",
    "personInCity": [
      {
        "id": 1,
        "city": "Sidney",
        "personName": "Giles",
        "dob": "2011-02-02"
      },
      {
        "id": 5,
        "city": "Paulba",
        "personName": "Sidney",
        "dob": "2016-07-16"
      }
    ]
  }
]
 

я не понимаю, какие изменения необходимо внести в Serializers.py

Ответ №1:

Чтобы получить правильный ответ, вам, возможно, потребуется изменить свой models.py и Serializers.py как показано ниже

 #----------models.py-----------
from django.db import models


class City(models.Model):
    city = models.CharField(max_length=100)

    def __str__(self):
      return self.city


class Person(models.Model):
    dob = models.DateField(editable=True)
    personName = models.CharField(max_length=100)
    city = models.ForeignKey(City, on_delete=models.SET_NULL, null=True, 
           related_name="personInCity")

    class Meta:
      ordering = ['-dob']

    def __str__(self):
       return self.personName

#----------Serializers.py-----------
from rest_framework import serializers
from .models import Person, City


class PersonSerializer(serializers.ModelSerializer):
    city = serializers.StringRelatedField(many=False)

    class Meta:
      model = Person
      fields = ("id", "personName", "dob", "city",)


class CitySerializer(serializers.ModelSerializer):
    personInCity=PersonSerializer(many=True)

    class Meta:
      model = City
      fields = ("id", "city","personInCity")
 

Должен дать вам такой ответ:

Скриншот ответа API, в соответствии с вашим вопросом