I am trying build a REST API using django. here is my models.py and serializers.py.
models.py
JavaScript
x
11
11
1
from django.db import models
2
3
class Person(models.Model):
4
5
city = models.CharField(max_length=100)
6
dob = models.DateField(editable=True)
7
personName = models.CharField(max_length=100)
8
9
class Meta:
10
ordering = ['-dob']
11
serailizers.py
JavaScript
1
9
1
from rest_framework import serializers
2
from .models import Person
3
4
class PersonSerializer(serializers.ModelSerializer):
5
6
class Meta:
7
model = Person
8
fields = [ 'id', 'city', 'dob', 'personName']
9
Here is my api – http://127.0.0.1:8000/api/city/Sidney/. I am trying to fetch data by city name.
I am getting the json in below format.
JavaScript
1
13
13
1
[{
2
"id": 1,
3
"city": "Sidney",
4
"personName": "Giles",
5
"dob": "2011-02-02"
6
},
7
{
8
"id": 5,
9
"city": "Paulba",
10
"personName": "Sidney",
11
"dob": "2016-07-16"
12
}]
13
But i want the json in below shown format –
JavaScript
1
21
21
1
[
2
{
3
"id": 123,
4
"city": "Sidney",
5
"personInCity": [
6
{
7
"id": 1,
8
"city": "Sidney",
9
"personName": "Giles",
10
"dob": "2011-02-02"
11
},
12
{
13
"id": 5,
14
"city": "Paulba",
15
"personName": "Sidney",
16
"dob": "2016-07-16"
17
}
18
]
19
}
20
]
21
i am not getting what change needs to be done in Serializers.py
Advertisement
Answer
To get correct response you might need to change your models.py and Serializers.py as below
JavaScript
1
43
43
1
#----------models.py-----------
2
from django.db import models
3
4
5
class City(models.Model):
6
city = models.CharField(max_length=100)
7
8
def __str__(self):
9
return self.city
10
11
12
class Person(models.Model):
13
dob = models.DateField(editable=True)
14
personName = models.CharField(max_length=100)
15
city = models.ForeignKey(City, on_delete=models.SET_NULL, null=True,
16
related_name="personInCity")
17
18
class Meta:
19
ordering = ['-dob']
20
21
def __str__(self):
22
return self.personName
23
24
#----------Serializers.py-----------
25
from rest_framework import serializers
26
from .models import Person, City
27
28
29
class PersonSerializer(serializers.ModelSerializer):
30
city = serializers.StringRelatedField(many=False)
31
32
class Meta:
33
model = Person
34
fields = ("id", "personName", "dob", "city",)
35
36
37
class CitySerializer(serializers.ModelSerializer):
38
personInCity=PersonSerializer(many=True)
39
40
class Meta:
41
model = City
42
fields = ("id", "city","personInCity")
43
Should give you the response like this: