python - 删除查询集中的重复项
问题描述
我有一个查询集,如下所示,它描述了与这些专辑相关的专辑和歌曲。型号名称是UserSongs
<QuerySet [{'id': 1, 'album': 'Sri', 'song': 'in the end','release': 2017},
{'id': 2, 'album': 'Adi', 'song': 'cafe mocha','release': 2016},
{'id': 3, 'album': 'Shr', 'song': 'smooth criminal','release': 2016},
{'id': 4, 'album': 'Mouse', 'song': 'trooper','release': 2017},
{'id': 5, 'album': 'Mouse', 'song': 'my mobile','release': 2015},
{'id': 6, 'album': 'Sri', 'song': 'my office','release': 2018},
{'id': 7, 'album': 'Sri', 'song': 'null','release': null},
{'id': 8, 'album': 'Mouse', 'song': 'null','release': null}]>
在后端,我将查询集转换为列表。请参见下面的代码:
albums_songs = UserSongs.objects.filter(album__in =
['Sri','Mouse']).values('albums','songs')
list_albums_songs = list(albums_songs)
我将此列表发送到前端以在表格中显示它。Sri
,Mouse
有多个条目,因为他们发布了多首歌曲。在前端,这些歌曲以专辑和歌曲为条目的表格显示。查询集中的每一项都显示为一行。比如下面这张。
Album Songs
Sri in the end
Adi cafe mocha
Adi null
Shr smooth criminal
Mouse trooper
Mouse my mobile
Sri my office
Sri null
Mouse null
但在表格中,null
也显示了歌曲的条目。我不想只为 , 显示那个空Sri
条目Mouse
。我想显示song=null
doe Adi
。我可以在转换为列表并遍历列表后将其删除。但这是代价高昂的。我相信我们可以在 django 查询本身中做到这一点。例如,如果专辑是 Sri 或 Mouse,则检查 song = null 并且不获取该条目。
或者在得到查询集之后,在转换成列表之前,我们可以从查询集中删除那些项目吗?
解决方案
您可以使用isnull
过滤器:
albums_songs = UserSongs.objects.filter(album__in=['Sri','Mouse'], songs__isnull=False).values('albums','songs')
编辑:根据更新问题中的新要求,您应该改用该exclude
方法:
albums_songs = UserSongs.objects.exclude(album__in=['Sri','Mouse'], songs__isnull=True).values('albums','songs')
推荐阅读
- java - 在 Spring 源代码中,一个方法两个变量 Generic 类型不同
- mysql - 如何使 SQL UPDATE 过程在计算中使用多于 1 个表?这样做会给我错误 1054
- scala - 为什么不同名称的案例类和对象出现在同一个scala文件中?
- sql - 拆分要在 IN 运算符中使用的字符串
- excel - 循环以将工作表保存在新工作簿中
- scala - 如何在 Scala 中创建不可变的双链表?
- r - ans[npos] <- rep(no, length.out = len)[npos] 中的错误:替换的长度为零
- r - For循环对r中数据框列中的值求和
- javascript - 当 html 在表单中时,我的 JavaScript 不运行
- ios - 为什么 cocoapods 不能在 Apple Silicon 上工作?