Django - как выбрать конкретный столбец из модели?
Я обнюхивал SO и не мог найти этого, но я уверен, что он где-то здесь. Извиняюсь за этот потенциальный двойной пост!
Если у меня есть этот код:
return Story.objects.filter(user=request.user.id).order_by('-create_date')
и скажем, что у Story есть, um, поле описания, и я просто хочу это поле описания, не нужно, чтобы db отправил что-нибудь еще с моим результатом, как мне ограничить запрос только этим?
То есть, как я могу сгенерировать этот SQL:
select description from story where user_id = x order by create_date desc
(где x - значение request.user.id, конечно)
Ответы
Ответ 1
Используйте values()
или values_list()
.
Если вы используете values()
, вы получите список словарей (технически a ValuesQuerySet
)
instance = MyModel.objects.values('description')[0]
description = instance['description']
Если вы используете values_list()
, вы получите список кортежей
instance = MyModel.objects.values_list('description')[0]
description = instance[0]
Или, если вы просто получаете одно значение, как в этом случае, вы можете использовать flat=True
kwarg с values_list
, чтобы получить простой список значений
description = MyModel.objects.values_list('description', flat=True)[0]
Ответ 2
Используйте метод только. Прочтите документацию
Ответ 3
Как говорится в документах, если ваш набор запросов будет давать только один объект, он рекомендует использовать get() вместо фильтра. Из имени, которое вы указали, я бы предположил, что user_id различен для каждого пользователя.
EDIT1: Я просто получил уведомление о порядке orderby. Поэтому я бы предложил использовать этот код, если user_id отличается или с pk.
description = story.objects.filter('description').get(user_id=x)