группа в Джанго - PullRequest
       19

группа в Джанго

3 голосов
/ 24 января 2009

Как создать простую группу по запросу в транковой версии django?

Мне нужно что-то вроде

SELECT name
FROM mytable
GROUP BY name

На самом деле я хочу просто получить все записи с разными именами.

Ответы [ 3 ]

12 голосов
/ 24 января 2009

Если вам нужны все разные имена, просто сделайте это:

Foo.objects.values('name').distinct()

И вы получите список словарей, каждый с ключом name . Если вам нужны другие данные, просто добавьте больше имен атрибутов в качестве параметров к вызову .values ​​(). Конечно, если вы добавите атрибуты, которые могут различаться в разных строках с одним и тем же именем, вы нарушите .distinct ().

Это не поможет, если вы хотите вернуть полные объекты модели. Но в любом случае получение разных имен и получение полных данных по своей сути несовместимы; откуда вы знаете , какую строку с данным именем вы хотите вернуть полностью? Если вы хотите вычислить какие-либо агрегированные данные для всех строк с данным именем, поддержка агрегации была недавно добавлена ​​в транк Django и может позаботиться об этом за вас.

3 голосов
/ 24 января 2009

Добавьте .distinct к вашему набору запросов:

Entries.objects.filter(something='xxx').distinct()
2 голосов
/ 24 января 2009

это не будет работать, потому что у каждой строки есть уникальный идентификатор. Так что каждая запись отличается ...

Для решения моей проблемы я использовал

foo = Foo.objects.all()
foo.query.group_by = ['name']

но это не официальный API.

...