Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python django_rest_框架ListSerializer添加重复项的问题_Python_Django_Django Rest Framework - Fatal编程技术网

Python django_rest_框架ListSerializer添加重复项的问题

Python django_rest_框架ListSerializer添加重复项的问题,python,django,django-rest-framework,Python,Django,Django Rest Framework,我正在使用一个PhoneGap应用程序和一个基于Django的后端的组合来记录一个研究项目的位置数据点 PhoneGap应用程序将捆绑多个数据点,并将它们推送到django rest framework API端点,例如: [{ "speed": -1, "time": 1487292133229.221, "longitude": 172.123456, "bearing": -1, "location_type": "current", "la

我正在使用一个PhoneGap应用程序和一个基于Django的后端的组合来记录一个研究项目的位置数据点

PhoneGap应用程序将捆绑多个数据点,并将它们推送到django rest framework API端点,例如:

[{
    "speed": -1,
    "time": 1487292133229.221,
    "longitude": 172.123456,
    "bearing": -1,
    "location_type": "current",
    "latitude": -43.123456,
    "accuracy": 65,
    "heading": -1,
    "altitude": 3.585018873214722,
    "altitudeAccuracy": 10
}, ...
]
然而,由于PhoneGap应用程序管理位置的方式,许多点在推送的JSON中重复

为了尝试解决这个问题,我重写了ListSerializer,通过基于时间戳和用户id(上传它的用户id)计算(未加密的)唯一散列,然后查看是否已经存在具有相同散列的内容,遍历传入数据并将其与数据库中已有的内容进行比较。之所以采用这种方法,是因为实际位置数据在添加到数据库之前经过加密

class DatumListSerializer(serializers.ListSerializer):
def创建(自我验证的_数据):
“”“仅当现有对象的计数为0(即它是唯一的)时才附加对象”,
而且它不会出现在列表中要提交的其他位置。”“”
对象=[]
对于已验证的_数据中的obj:
哈希值=生成哈希(obj['timestamp'],obj['user'].id)
如果Datum.objects.filter(散列=散列值).count()=0:
objects.append(Datum.objects.create(user=obj.pop('user').id,**obj))
返回对象
这种方法能够捕获大部分重复项,但不是所有重复项。是否有人对添加非重复项的原因有任何想法?我是否应该在数据模型的“散列”字段上设置唯一约束,然后默默地忽略导致IntegrityError的插入


谢谢

因为json本身已被重复项损坏。我建议在后端(django)收到json后,首先清理json。您可以尝试此处给出的方法-

一旦JSON是干净的,然后创建所需的对象。希望这有帮助