Django 在rest框架中获取反向关系对象
如何从serializers.py中的反向关系获取对象 我有一个这样的模型Django 在rest框架中获取反向关系对象,django,django-views,django-rest-framework,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.Fore
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
从中,我可以通过相关名称直接访问该类别,这是my serializers.py
class PostSerializer(serializers.ModelSerializer):
class Meta:
model = Post
fields = ('title','content','category')
问题是视图仅返回类别post 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???相关的名称将只返回id,这一点都没有错。如果需要完整表示,还需要在父对象中添加每个子对象的序列化版本。像这样:
class PostSerializer(serializers.ModelSerializer):
category = CategorySerializer(many=True, required=False)
因此,首先需要有一个CategorySerializer,然后必须在PostSerializer中添加关系。所有参数都是可选的。这是一个小例子
注:我建议使用“类别”作为相关的名称,因为你可以有多个类别 尝试此操作后,发现“Post”对象没有属性“category”错误。您是否已将相关的名称更改为categories?哦,是的,这就是问题所在,它现在可以工作了!!谢谢