如何在“创建和列出视图”中使用相同的序列化器

时间:2019-06-19 08:12:10

标签: django django-rest-framework

我有一个PostSerializer,而这个序列化器有一个user字段。我也有一个UserSerializer。所以我想像这样

在PostSerializer中使用UserSerializer
class PostSerializer(serializers.ModelSerializer):
    user = UserSerializer(many=False)
    class Meta:
         fields = ('user', 'title')

但是当我尝试在CreateView中使用时出现错误,因为我不发送UserSerializer数据,而是发送了user_id。

我必须在“创建”和“列表”视图中使用相同的序列化器。因为我习惯使用ListCreateAPIView。

1 个答案:

答案 0 :(得分:2)

当我不得不处理这种序列化时,我会这样做:

class PostSerializer(serializers.ModelSerializer):
    user_data = UserSerializer(
        read_only=True,
        source='user',
    )

    class Meta:
        fields = (
            'user',
            'user_data',
            'title',
        )

阅读时会得到user_data,写时只需要用户ID为user