Python django_rest_框架ListSerializer添加重复项的问题
我正在使用一个PhoneGap应用程序和一个基于Django的后端的组合来记录一个研究项目的位置数据点 PhoneGap应用程序将捆绑多个数据点,并将它们推送到django rest framework API端点,例如: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
[{
"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是干净的,然后创建所需的对象。希望这有帮助