如何在django rest框架中包含相关字段到模型序列化?

sbe*_*kov 3 django django-models django-rest-framework

我有两个型号:

class User(models.Model):
  username = models.CharField()
Run Code Online (Sandbox Code Playgroud)

class Post(models.Model):
  text = models.TextField()
  owner = models.ForeignKey(User)
Run Code Online (Sandbox Code Playgroud)

使用这样的序列化器:

from rest_framework.serializers import ModelSerializer

class PostSerializer(ModelSerializer):
    owner = serializers.Field(source='owner.id')

    class Meta:
        model = Post
        fields = ['text', 'owner']
Run Code Online (Sandbox Code Playgroud)

我得到了所有者ID的所有帖子.如何修改序列化程序以获取包含整个用户模型的所有者fialed的所有帖子?

我试着从rest_framework.serializers导入ModelSerializer

class PostSerializer(ModelSerializer):
    owner = serializers.Field(source='owner')

    class Meta:
        model = Post
        fields = ['text', 'owner']
Run Code Online (Sandbox Code Playgroud)

但是只用我想要的用户名而不是整个模型替换了id(因为User的表示返回了用户名字段).

sbe*_*kov 6

解决方案是定义像这样扩展ModelSerializer的UserSerializer

from rest_framework.serializers import ModelSerializer

class UserSerializer(ModelSerializer):

    class Meta:
        model = UserModel
        fields = ['id', 'username']
Run Code Online (Sandbox Code Playgroud)

然后在PostSerializer中使用它:

from myapp import UserSerializer
from rest_framework.serializers import ModelSerializer

class PostSerializer(ModelSerializer):
    owner = UserSerializer()

    class Meta:
        model = PostModel
        fields = ['id', 'owner']
Run Code Online (Sandbox Code Playgroud)