【问题标题】:Remove duplicates in the query set删除查询集中的重复项
【发布时间】:2019-03-19 15:02:09
【问题描述】:

我有一个查询集,如下所示,它描述了与这些专辑相关的专辑和歌曲。型号名称为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 条目。我不想只为SriMouse 显示那个空条目。我想显示song=null doe Adi。我可以在转换为列表并遍历列表后将其删除。但这是代价高昂的。我相信我们可以在 django 查询本身中做到这一点。例如,如果专辑是 Sri 或 Mouse,则检查 song = null 并且不获取该条目。

或者在得到查询集之后,在转换成列表之前,我们可以从查询集中删除那些项目吗?

【问题讨论】:

    标签: python django django-queryset django-orm


    【解决方案1】:

    您可以使用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')
    

    【讨论】:

    • 谢谢你的回复,blhsing。我知道你在做什么。如果我有这么多专辑怎么办,我无法将每张专辑都写在一个列表中。另外,我已经编辑了问题,请检查。
    • @SriHarsha 您想要查询中的所有专辑还是其中一些专辑?
    • @SriHarsha 我已经根据您的新要求更新了我的答案。
    • @blhsing 这就像一个魅力。在您发布之前的答案后,我已将 is null 更改为 true。但那是你的答案。
    猜你喜欢
    • 2018-10-26
    • 2012-11-02
    • 1970-01-01
    • 2011-08-18
    • 2019-12-11
    • 1970-01-01
    • 2014-07-03
    • 2021-09-24
    • 2013-03-03
    相关资源
    最近更新 更多