结合使用现有的ModelSerializer和JSONResponse

时间:2019-11-03 20:59:00

标签: python django django-rest-framework

我有一个不使用视图集的Twitter身份验证视图,因此可以在后端处理auth。该视图接受oauth_token并使用Twython获取配置文件并创建Twitter模型。

当前,我仅在成功时返回状态201,但是为了减轻创建后对另一个请求的需求,我想返回创建的模型。我已经有一个TwitterSerializer,它定义了要包含的fields,所以我希望能够重用它。

TwitterSerializer

class TwitterSerializer(serializers.ModelSerializer):

    class Meta:
        model = Twitter
        fields = (
            "id",
            "twitter_user_id",
            "screen_name",
            "display_name",
            "profile_image_url",
        )

当我尝试使用它时,出现了Instance of TwitterSerializer is not JSON serializable错误。

            serialized = TwitterSerializer(instance=twitter)
            return JsonResponse({ "created": serialized })

我可以使用serializers.serialize()

返回模型的序列化实例
            serialized = serializers.serialize('json', [twitter, ])
            serialized = serialized[0]
            return JsonResponse({ "created": serialized })

我可以将fields kwarg传递给serialize(),但我不需要重复自己。那么在这种情况下可以重用我的TwitterSerializer吗?我很难找到直接的答案,因为大多数文档都假设您可以理解,在使用序列化程序时将使用ViewSet,这感觉就像是一种边缘情况。我也欢迎重构这种方法的建议!

1 个答案:

答案 0 :(得分:1)

序列化后,您可以使用序列化器的data属性来获取数据。

serialized = TwitterSerializer(instance=twitter)
return JsonResponse({ "created": serialized.data })

您应该这样使用Django rest Response而不是JsonResponse

from rest_framework response
serialized = TwitterSerializer(instance=twitter)
return response.Response({ "created": serialized.data })