postgresql 编程错误:列“X”为双精度类型,但表达式为numeric[]类型

gcmastyq  于 2023-03-08  发布在  PostgreSQL
关注(0)|答案(1)|浏览(141)

我正在尝试用Django Rest Framework和Psycopg2库编写一个API。这个API使用PostgreSQL数据库。我需要在这个数据库中存储2个浮点数组字段,因为API使用2个传感器将数据流传输到Android应用程序,它们以两个数组存储在应用程序中,并通过JSON发送到API REST。
这些是我的www.example.com、www.example.com和views_api. py: models.py , serializers.py and views_api.py:

    • 型号. py**
class DataTest(models.Model):
  patient = models.ForeignKey(Patient)
  label = models.CharField(max_length=36)
  angle_data = ArrayField(models.FloatField())
  emg_data = ArrayField(models.FloatField())
  created_at = models.DateTimeField(auto_now_add=True)
  modified_at = models.DateTimeField(auto_now=True)

  def __unicode__(self):
    return self.patient
    • 序列化程序. py**
class DataTestSerializer(serializers.Serializer):
  pk = serializers.IntegerField(read_only=True)
  label = serializers.CharField()
  angle_data = serializers.ListField(child=serializers.FloatField())
  emg_data = serializers.ListField(child=serializers.FloatField())
  patient = serializers.PrimaryKeyRelatedField(queryset=Patient.objects.all())

  def create(self, validated_data):
    return DataTest.objects.create(**validated_data)

  def update(self, instance, validated_data):
    instance.label = validated_data.get('label', instance.label)
    instance.angle_data = validated_data.get('angle_data', instance.angle_data)
    instance.emg_data = validated_data.get('emg_data', instance.emg_data)
    instance.patient = validated_data.get('patient', instance.patient)
    instance.save()
    return instance
    • 应用程序接口. py**
class DataTestList(APIView):

  def get(self, request, format=None):
    dataTests = DataTest.objects.all()
    serializer = DataTestSerializer(dataTests, many=True)
    return Response(serializer.data)

  def post(self, request, format=None):
    serializer = DataTestSerializer(data=request.data)
    if serializer.is_valid():
       serializer.save()
       return Response(serializer.data, status=status.HTTP_201_CREATED)
    return Response(serializer.error_messages,
status=status.HTTP_400_BAD_REQUEST)

最后,我测试了API,并发送了一个JSON示例:{"标签":"测试","Angular 数据":[1.434,2.243,3.234],"肌电图数据":[2.3,2.1],"患者":1}
我得到了以下错误:

  • 编程错误:列"angle_data"为双精度类型,但表达式为numeric []类型第1行:...,"创建时间","修改时间")值(1,'测试',数组[1.0,...^*

提示:您需要重写或强制转换表达式。
我调试过API,看到序列化器接收到一个浮点列表,我猜想问题是PostgreSQL中的列是双精度的,浮点列表没有用双精度编码。
有人能帮帮我吗?
谢谢你们!

ctehm74n

ctehm74n1#

我发现这篇文章在处理django模型中的JSON数据时很有帮助
https://www.laurencegellert.com/2018/09/django-tricks-for-processing-and-storing-json/
此外,我使用https://github.com/django-json-api/django-rest-framework-json-api来获得带有DRF的格式更好的超媒体RESTful API。https://docs.djangoproject.com/en/dev/releases/4.2/#jsonfield-for-all-supported-database-backends
您也可以尝试使用子参数ListField。
这是一个更高层次的建议。

相关问题