python - Django 序列化程序对象不是 JSON 可序列化的

标签 python django serialization django-models django-rest-framework

所以我在一个使用 Django 的网站上工作,但在使用序列化程序时遇到了问题。这是代码:

class DataPointSerializer(serializers.ModelSerializer):
    value = serializers.DecimalField(max_digits=30, decimal_places=15)
    sensor = serializers.ChoiceField(choices=list(Sensor.objects.all()))
    point = serializers.ChoiceField(choices=list(MapPoint.objects.all()))

    class Meta:
        model = DataPoint
        fields = "__all__"

    def create(self, attrs, instance=None):
        return DataPoint(value=attrs['value'], sensor=attrs['sensor'], point=attrs['point'])

我的 DataPoint 模型使用值作为小数字段,传感器作为外键,点作为另一个外键。我正在使用选择字段来获取已创建的对象,但是从创建函数中,我得到一个 TypeError 说(传感器对象)不是 JSON 可序列化的。我假设同样的事情正在发生,但我不确定该怎么做。任何帮助将不胜感激!

最佳答案

这里的主要问题是您将 DataPoint 类作为创建函数的结果而不是 DataPoint 对象传递。这就是错误的意思。 sensorpoint 也是主键。因此,您可以在 serializer 中使用 PrimaryKeyRelatedField

试试这个

class DataPointSerializer(serializers.ModelSerializer):
    value = serializers.DecimalField(max_digits=30, decimal_places=15)
    sensor = serializers.PrimaryKeyRelatedField(queryset=Sensor.objects.all())
    point = serializers.PrimaryKeyRelatedField(queryset=MapPoint.objects.all())

    class Meta:
        model = DataPoint
        fields = "__all__"

    def create(self, validated_data, instance=None):
        return DataPoint.objects.create(**validated_data)

注意:由于您使用的是模型序列化程序,因此您不需要指定字段 或为create 编写定义更新函数。模型序列化器本身从模型中找到字段,它应该包含简单创建和更新函数的定义。可以看详情here .考虑到这些,您的 DataPointSerializer 可以最小化为

class DataPointSerializer(serializers.ModelSerializer):
    class Meta:
        model = DataPoint
        fields = "__all__"

关于python - Django 序列化程序对象不是 JSON 可序列化的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49617116/

相关文章:

python - 写入形状文件

django - 无法将本地 Postgre 数据库推送到 Heroku

python - Django 模型表不包含给定字段

python - 将通知推送到 Django 中的特定 Web 客户端

Java:通用序列化方法

scala - 仅在类而非对象上调用闭包外部的函数时,任务不可序列化 : java. io.NotSerializedException

python - 我有一个表,其中有一堆具有不同数据类型值的列,但我只想提取对象数据类型的值

Python 多线程 max_workers

Java gson 数组的数组 : java. lang.IllegalStateException

python - BeautifulSoup 转换成 python 换行符