Удалить дубликаты в наборе запросов - PullRequest
0 голосов
/ 15 октября 2018

У меня есть набор запросов, подобный приведенному ниже, который отображает альбомы и песни, связанные с этими альбомами.Название модели: 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 Доу Adi. Я могу удалить его после преобразования в список и перебора списка.Но это дорого.Я считаю, что мы можем сделать это в самом запросе Django.Что-то вроде, если альбом Sri или Mouse, тогда проверьте для song = null и не получите эту запись.

Или после получения набора запросов перед преобразованием в список мы можем удалить эти элементы из набора запросов?

1 Ответ

0 голосов
/ 15 октября 2018

Вы можете использовать фильтр 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')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...