Как выполнить django-запрос, отсортировав наиболее часто встречающиеся и удалив дубликаты в запросе? - PullRequest
0 голосов
/ 10 февраля 2019

У меня есть модель, которая выглядит следующим образом в моей базе данных ...

Столбец 1 (Project = CharField, см. Models.py ниже)
Deathstar, BB8,Кольцо ореола, космический корабль

Колонка 2 (Tag = CharField, см. Models.py ниже)
c, cpp, cpp, много вещей

У меня естьследующие требования, которые я должен выполнить.
1 Должен сортировать столбец «Tag» от наиболее часто встречающихся до наименее встречающихся.
2 Должен удалять дубликаты (например, «cpp» в этом примере) в запросе.

Я пробовал сортировать от наиболее часто встречающихся случаев, но там говорится, что тегов 'c' больше, чем тегов 'cpp?!?!Сначала должно быть указано «cpp», затем «c».

NotesAppModel.objects.annotate(Count('tag'))  
<QuerySet [<NotesAppModel: c>, <NotesAppModel: cpp>, <NotesAppModel: cpp>, <NotesAppModel: lots of stuff>]>

Я также попробовал следующее, но в нем просто указано то же самое.
NotesAppModel.objects.annotate(c=Count('tag')).order_by('-c')

Мне также нужноудалить дубликаты в моем запросе.Я знаю, что если бы это был простой список строк, я бы использовал следующую простую функцию:Но это не работает с запросами Django.Что такое путь Джанго?

def remove_dups(somelist):
    seen = set()
    return [x for x in somelist if not (x in seen or seen.add(x))]

models.py

class NotesAppModel(models.Model):
    project = models.CharField(max_length=100, blank=True)
    tag     = models.CharField(max_length=100, blank=True)
    def __str__(self):
        return self.tag
...