“不是有效的字符串。” - 在 Django Rest Framework 中尝试将 dict 保存到 TextField 时出错

Dmi*_*nov 3 python django django-rest-framework

我的models.py 中有以下代码:

class ApiLog(models.Model):
...
incoming_data = models.TextField('incoming data', null=True, blank=True)
Run Code Online (Sandbox Code Playgroud)

serializers.py 中

class ApiLogSerializer(serializers.ModelSerializer):
    class Meta:
        model = ApiLog
        fields = ('incoming_data',)  
Run Code Online (Sandbox Code Playgroud)

views.py 中

class ApiLogViewSet(APIView):
    def post(self, request, format=None):
        serializer = ApiLogSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
Run Code Online (Sandbox Code Playgroud)

在 POST 请求中,我发送:

data = {..., 
        'incoming_data':{"key1":"value1","key2":"value2"}
       }
Run Code Online (Sandbox Code Playgroud)

在查看尝试serializer.is_valid() 时出现错误:

{"incoming_data":["Not a valid string."]}
Run Code Online (Sandbox Code Playgroud)

也许是因为我尝试将字典保存到 TextField?

是否可以将此词典保存到 TextField?建议表示赞赏。

JPG*_*JPG 6

在你的序列化器中试试这个:

class ApiLogSerializer(serializers.ModelSerializer):
    incoming_data = serializers.JSONField() # change is here

    class Meta:
        model = ApiLog
        fields = ('incoming_data',)
Run Code Online (Sandbox Code Playgroud)

这会将您的JSONdict转换为字符串并作为Text.

更多细节请参考官方 DRF 文档