Подтвердить что ты не робот

Модель Django - Получить отдельный список значений

Я пытаюсь получить список различных внешних ключей, и я написал это:

my_ids = Entity.objects.values('foreign_key').distinct()

Но я получаю только список внешних ключей UNDISTINCT... Что мне не хватает?

Спасибо!

4b9b3361

Ответ 1

Вот для подсказки! Оба решения не будут работать на 100%... но я как бы объединил их:)

Передача аргумента в отдельный файл doesnt работает для MySQL-баз данных (afaik)

Это работает и возвращает только один объект:

Entity.objects.order_by('foreign_key').values('foreign_key').distinct()

Но спасибо в любом случае:)

Ответ 2

Возможно, вы захотите пойти с этим:

Entity.objects.order_by().values_list('foreign_key', flat=True).distinct()

Ответ 3

Entity.objects.values_list('foreign_key', flat=True).distinct().order_by()

не работает с порядком

Любые поля, используемые в вызове order_by(), включаются в SQL SELECT колонны. Иногда это может привести к неожиданным результатам при использовании в соединение с четными(). Если вы заказываете по полям из связанных модель, эти поля будут добавлены к выбранным столбцам, и они могут сделать иначе, чтобы повторяющиеся строки выглядели отчетливо. Поскольку дополнительные столбцы не отображаются в возвращаемых результатах (они есть только для поддержка заказа), иногда кажется, что неявные результаты возвращается.

Аналогично, если вы используете запрос values ​​() для ограничения столбцов выбраны столбцы, используемые в любом порядке order_by() (или по умолчанию упорядочение) по-прежнему будут задействованы и могут повлиять на уникальность Результаты.

Мораль здесь заключается в том, что если вы используете разные(), будьте осторожны упорядочение по смежным моделям. Аналогично, при использовании различных() и значения() вместе, будьте осторожны при упорядочении по полях, не входящим в values ​​().

https://docs.djangoproject.com/en/dev/ref/models/querysets/#distinct

Ответ 4

Entity.objects.order_by('foreign_key').distinct('foreign_key')

Если у вас уже есть их как список, то преобразуйте его в set(), чтобы получить различные значения.