python - 为了允许非 dict 对象被序列化,将 safe 参数设置为 False

标签 python django angular

我使用 websocket 前端( Angular )后端(Django)创建实时聊天应用程序..我想将消息存储到数据库(mySql)..当我尝试将消息数组从 Angular 存储到 django 时..它给了我错误像 500 内部服务器 Eroor 一样,为了允许非 dict 对象被序列化,将 safe 参数设置为 False。 我在列表数组中发送消息数据..那么出了什么问题?

模型.py

class msg(models.Model):
    name = models.ForeignKey(User, on_delete=models.CASCADE)
    receiver = models.CharField(max_length=20)
    text = models.CharField(max_length=1200)
    myDate = models.DateTimeField()

序列化器.py

class MesSerializer(serializers.ModelSerializer):
    name = serializers.SlugRelatedField(many=False, slug_field='name', queryset=User.objects.all())
    receiver = serializers.SlugRelatedField(many=False, slug_field='name', queryset=User.objects.all())
    class Meta:
        model = msg
        fields = '__all__'

查看.py

class msg_list(APIView):
    def get(self, request, format=None):
        mes = msg.objects.all()
        serializer = MesSerializer(mes, many=True)  # convert into JSON
        return Response(serializer.data)

    def post(self, request, formate = None):
        data = JSONParser().parse(request) #type list
        serializer = MesSerializer(data= data, many = True) #type list
        if serializer.is_valid():
            serializer.save()
            return JsonResponse(serializer.data, status=201)
        return JsonResponse(serializer.errors, status=400)

当我打开消息 api 时: enter image description here

最佳答案

序列化前不需要解析请求。只需传递 request.data 作为序列化器参数:

def post(self, request, formate = None):
    serializer = MesSerializer(data=request.data, many=True) #type list
    if serializer.is_valid():
        serializer.save()
        return JsonResponse(serializer.data, status=201)
    return JsonResponse(serializer.errors, status=400)

UPD

receiver 是 CharField,因此您不能对其使用 SlugRelatedField。只需在序列化器中使用默认的 CharField 即可:

class MesSerializer(serializers.ModelSerializer):
    name = serializers.SlugRelatedField(many=False, slug_field='name', queryset=User.objects.all())
    class Meta:
        model = msg
        fields = '__all__'

关于python - 为了允许非 dict 对象被序列化,将 safe 参数设置为 False,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51511813/

相关文章:

python - Django 过滤 MySQL 警告

angular - 安装 ng 添加 @ng-bootstrap/ng-bootstrap 时出错

python - 如何将 pandas.core.series.Series 转换为列表?

python - 在一定数量的变量之后更改列表输出

python - sorl-thumbnail 在 django 中不起作用

django - 如何使用模拟数据测试 Stripe Webhook

angular - 在 Angular 中发出值,记录为 [object Object] 而不是值

angular - 禁用依赖日期选择器 Angular Power Bootstrap angular 6

python - 属性错误 : 'RandomForestClassifier' object has no attribute 'fit_transform'

python - lxml.htm.clean 的目的是从标签中删除 'style'