在rest框架中获取Reverse关系对象

时间:2014-08-12 13:17:22

标签: django django-views django-rest-framework

如何从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 ??

1 个答案:

答案 0 :(得分:1)

related_name 只会返回id,这根本就没有错。如果需要完整表示,还需要在父级中添加每个子对象的序列化版本。像这样:

class PostSerializer(serializers.ModelSerializer): 
    category = CategorySerializer(many=True, required=False)

所以你首先需要一个CategorySerializer,然后你必须在PostSerializer中添加关系。所有参数都是可选的。 Here是一个小例子。

P.S。 :我建议使用'类别'作为related_name,因为你可以拥有多个。