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

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, конечно)

4b9b3361

Ответ 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)