Получить идентификатор первичного ключа с фильтром столбца в Django ORM - PullRequest
2 голосов
/ 20 января 2020

У меня есть таблица книг в моем Postgresql. На рисунке ниже показано, как выглядит структура таблицы.

enter image description here

Теперь у меня есть имя книги " 249 ", и я хочу чтобы получить соответствующий первичный ключ, который равен 5. Ниже приведен запрос, который я пытаюсь выполнить, но Django выдает ошибку.

my_book_name = 249

books.model.filter(book_name=my_book_name).get('book_id') # Not Working

Может кто-нибудь предложить правильный запрос ORM для получения соответствующего book_id для book_name?

Примечание : - Я удалил PK = 4, поэтому он отсутствует в столбце.

Ответы [ 2 ]

1 голос
/ 21 января 2020

Я не знаю, почему вы используете get with filter! Попробуйте это

books.objects.filter(book_name=my_book_name).values('book_id')

Это вернет book_id для всех записей, имеющих book_name = my_book_name

1 голос
/ 21 января 2020

Вы можете использовать .values(..) здесь:

Books.objects.<b>values('book_id')</b>.get(book_name=my_book_name)['book_id']

Но использование .values(..) часто не очень хорошая идея. Обычно вы извлекаете Book объект в память, например:

book = Books.objects.get(book_name=my_book_name)
book.book_id  # 5

Но даже тогда возможно, что несколько книг (или вообще никаких книг) не имеют такого имени. Таким образом, вы должны использовать .filter(..), чтобы получить QuerySet из Book с. QuerySet - это ленивая коллекция, и, следовательно, может содержать ноль, один или более Book объектов здесь:

books = Books.objects.filter(book_name=my_book_name)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...