如何从serializers.py中的反向关系中获取对象?
我有这样的模型
class Post(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
def __str__(self):
return self.title
class Category(models.Model):
post = models.ForeignKey(Post, related_name='category')
name = models.CharField(max_length=200)
slug = models.SlugField(max_length=70, unique=False)
def __str__(self):
return self.title
从Django Rest Framework documentation开始,我可以通过相关名称直接访问该类别,这是我的serializers.py
class PostSerializer(serializers.ModelSerializer):
class Meta:
model = Post
fields = ('title','content','category')
问题是视图只返回类别帖子ID:
HTTP 200 OK
Vary: Accept
Allow: GET, HEAD, OPTIONS
Content-Type: application/json
{
"count": 1,
"next": null,
"previous": null,
"results": [
{
"title": "Post title 1",
"content": "test content..blah blah blah",
"category": [
1
]
}
]
}
如何获取类别名称和slug ??
答案 0 :(得分:1)
related_name 只会返回id,这根本就没有错。如果需要完整表示,还需要在父级中添加每个子对象的序列化版本。像这样:
class PostSerializer(serializers.ModelSerializer):
category = CategorySerializer(many=True, required=False)
所以你首先需要一个CategorySerializer,然后你必须在PostSerializer中添加关系。所有参数都是可选的。 Here是一个小例子。
P.S。 :我建议使用'类别'作为related_name,因为你可以拥有多个。