#python #django
#python #django
Вопрос:
У меня есть таблица с именем user_info
. Я хочу получить имена всех пользователей. Итак, в таблице есть поле с именем name
. Итак, в sql я делаю что-то вроде
SELECT distinct(name) from user_info
Но я не могу понять, как сделать то же самое в django. Обычно, если у меня уже есть определенное известное значение, я могу сделать что-то вроде приведенного ниже.
user_info.objects.filter(name='Alex')
А затем получить информацию для этого конкретного пользователя.
Но в этом случае для данной таблицы я хочу получить все значения имен, используя django ORM точно так же, как я делаю в sql.
Вот моя модель django
class user_info(models.Model):
name = models.CharField(max_length=255)
priority = models.CharField(max_length=1)
org = models.CharField(max_length=20)
Как я могу это сделать в django?
Ответ №1:
Вы можете использовать values_list
.
user_info.objects.values_list('name', flat=True).distinct()
Обратите внимание, в Python классы обычно определяются в InitialCaps: ваша модель должна быть userInfo.
Комментарии:
1. Извините @daniel, я понимаю, что это надолго. Но, делая это для модели, в которой есть названия компаний, я получил только целые числа. Вроде:
<QuerySet [11, 14, 11]>
вместоGoogle, Apple, Tesla
. Есть идеи по причине, почему?
Ответ №2:
Вы можете использовать values_list()
то, что указано в ответе Даниэля, который предоставит вам ваши данные в виде списка, содержащего значения в поле. Или вы также можете использовать, values()
вот так:
user_info.object.values('name')
который вернет вам набор запросов, содержащий словарь. values_list()
и values()
используются для выбора столбцов в таблице.
Ответ №3:
В дополнение к принятому ответу, если поле является внешним ключом, значения идентификатора (числовые) возвращаются в наборе запросов. Следовательно, если вы ожидаете другие типы значений, определенные в модели, частью которой является внешний ключ, тогда вам нужно изменить запрос следующим образом:
`Post.objects.values_list('author__username')`
Post — это класс модели, имеющий author в качестве поля внешнего ключа, которое, в свою очередь, имеет свое поле username:
Здесь к полю «автор» было добавлено двойное значение undersocre, за которым следует поле «имя», в противном случае в наборе запросов будет возвращен первичный ключ модели. Я предполагаю, что это было сомнение @ Carlo в принятом ответе.
Ответ №4:
Вот мой быстрый способ получить это! 😉
names_list = list(
UserInfo.objects.distinct().order_by('name').values_list('name', flat=True)
)
Комментарии:
1. можете ли вы каким-либо образом обосновать утверждение «blazing speed»? И зачем это вообще нужно указывать?
2. Человек… Я полагаю, у вас сегодня был плохой день. Пожалуйста, посмотрите на это: youtube.com/watch?v=HjPgdhRsGIQamp;ab_channel=MasoodBoomgaard Скажите мне более быстрый и эффективный способ извлечь это из вашей базы данных, и я понизлю свой комментарий до «вот один из способов сделать это». 🙂