我想设置'unique_together'在我的DB(postgres)上。问题是我可能已经在数据库上有重复项,因此迁移可能无法正常工作。所以我看到它 - 在部署之前我需要运行一些脚本来删除所有重复(只留下其中一个)。我更喜欢使用Django Custom Command。
表'映射'看起来像 - Id,user_id,user_role,project_id,user_type。 我想设置'unique_together'对于他们所有人。 我用来检索重复行的脚本是 -
duplicates = (Mapping.objects.values('project_id', 'user_id', 'user_type', 'user_role').annotate(
count=Count('id')).values('project_id', 'user_id', 'user_type', 'user_role').order_by().
filter(count__gt=1))
它返回包含重复属性的对象列表。 例如:
QuerySet [{'user_id': '2222', 'user_type': '1', 'user_role': '1', 'project_id': UUID('c02bda0e-5488-4519-8f34-96b7f3d36fd6')}, {'user_id': '44444', 'user_type': '1', 'user_role': '1', 'project_id': UUID('8c088f57-ad0c-411b-bc2f-398972872324')}]>
有没有办法直接检索ID? 还有更好的方法吗?
答案 0 :(得分:2)
你可以尝试一下:
Mapping.objects.values(
'project_id', 'user_id', 'user_type', 'user_role'
).annotate(count=Count('id')
).annotate(max_id=Max('id')
).values('max_id').order_by().filter(count__gt=1)