Django Restframework nested serializer 연습
13 Nov 2019 | Django DRFdjango restframework nested serializer (연습)
Serializers - Django REST framework 다음과 같은 model과 serializer가 있다.
class Blog(models.Model):
name = models.CharField(max_length=100)
tagline = models.TextField()
def __str__(self):
return self.name
class Author(models.Model):
name = models.CharField(max_length=200)
email = models.EmailField()
def __str__(self):
return self.name
class Entry(models.Model):
blog = models.ForeignKey(Blog, on_delete=models.CASCADE)
created_at = models.DateField(auto_now=True)
updated_at = models.DateField(auto_now_add=True)
authors = models.ManyToManyField(Author)
class Meta():
ordering = ['-created_at']
class Authorserialzier(serializers.ModelSerializer):
class Meta:
model = Author
fields = '__all__'
class Entryserialzier(serializers.ModelSerializer):
class Meta:
model = Entry
fields = '__all__'
# depth = 1
FK를 사용하는 경우에 serializer의 meta에서 depth를 설정해주지 않으면, id값을 가져와서 출력해준다. 아무런 의미 없는 정보이다.
{
"count": 1000,
"next": "http://127.0.0.1:8000/tt/entry/?limit=2&offset=2",
"previous": null,
"results": [
{
"id": 33232,
"created_at": "2019-11-13",
"updated_at": "2019-11-13",
"blog": 71,
"authors": [
51125,
51128,
51131,
51132,
51133
]
},
{
"id": 33233,
"created_at": "2019-11-13",
"updated_at": "2019-11-13",
"blog": 69,
"authors": [
51130,
51131,
51132
]
}
]
}
해결방법은 depth값을 설정해주면된다.(참고 : Serializers - Django REST framework)
여기서는 한번만 들어가면 되니까 1로해준다. 여러번 파고들어가면 그에맞는 정수를 입력해주면 된다.
depth = 1일 때 결과는 다음과 같다.
{
"count": 1000,
"next": "http://127.0.0.1:8000/tt/entry/?limit=2&offset=2",
"previous": null,
"results": [
{
"id": 33232,
"created_at": "2019-11-13",
"updated_at": "2019-11-13",
"blog": {
"id": 71,
"name": "c",
"tagline": ""
},
"authors": [
{
"id": 51125,
"name": "0",
"email": "0@gmail.com"
},
{
"id": 51128,
"name": "3",
"email": "3@gmail.com"
},
{
"id": 51131,
"name": "6",
"email": "6@gmail.com"
},
{
"id": 51132,
"name": "7",
"email": "7@gmail.com"
},
{
"id": 51133,
"name": "8",
"email": "8@gmail.com"
}
]
},
{
"id": 33233,
"created_at": "2019-11-13",
"updated_at": "2019-11-13",
"blog": {
"id": 69,
"name": "a",
"tagline": ""
},
"authors": [
{
"id": 51130,
"name": "5",
"email": "5@gmail.com"
},
{
"id": 51131,
"name": "6",
"email": "6@gmail.com"
},
{
"id": 51132,
"name": "7",
"email": "7@gmail.com"
}
]
}
]
}