【问题标题】:how to return nested json using django rest framework如何使用 django rest 框架返回嵌套的 json
【发布时间】:2021-08-14 20:01:00
【问题描述】:

我正在尝试使用 django 构建一个 REST API。这是我的 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 中进行的更改

【问题讨论】:

    标签: python django django-rest-framework


    【解决方案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")
    

    应该给你这样的回应:

    Screenshot of API response, as per your question

    【讨论】:

      猜你喜欢
      • 2017-08-21
      • 2020-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      • 2014-05-21
      • 2015-05-28
      相关资源
      最近更新 更多