Django REST框架序列化程序中GET和POST的不对称特性

时间:2014-07-12 14:51:48

标签: django django-rest-framework

我正在尝试制作允许GET和POST的模型和序列化

GET将允许客户端查看所有用户的列表,并显示姓名,姓氏等信息,但不显示access_token

但是,POST只需要access_token,并且可以从Facebook获取所有信息,如名字,姓氏等。

如何在序列化器中表达和编码get和post的这种不对称性质

serializers.py

class UserSerializer(serializers.HyperlinkedModelSerializer):
    """
    User Serializer
    """

    class Meta:
        model = models.User
        fields = ('id', 'username', 'first_name', 'last_name', 'image_url', 'activities', 'url', 'access_token')

views.py

class UserViewSet(viewsets.ModelViewSet):
    """
    List all users - this should be taken out as it would never be used in app, and we wont want this as well, as app can only view friend details
    Gives details of an user - this should stay
    """
    queryset = models.User.objects.all()

    serializer_class = UserSerializer

1 个答案:

答案 0 :(得分:3)

以下任何选项:

  • 在您不希望用户在创建时提供的字段上使用read_only
  • 覆盖get_queryset并为GET vs POST返回不同的序列化程序。
  • 明确地在retrieve()上写下create()ViewSet方法。
  

然而,POST只需要access_token,并且可以从Facebook获取所有信息,如名字,姓氏等。

您可能需要在序列化程序上使用自定义restore_object来提取该信息。