在 Django ORM 中使用列过滤器获取主键 ID

Get Primary key id with Column filter in Django ORM

我的 Postgresql 中有一个 table books。下图是 table 结构的样子。

现在,我有 book_name“249”,我想得到它对应的主键 5。下面是我正在尝试的查询做,但 Django 抛出错误。

我的_book_name = 249

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

有人可以建议正确的 ORM 查询以获得 book_name 的相应 book_id 吗?

注意:- 我删除了 PK=4 这就是它在列中丢失的原因。

你可以在这里使用.values(..)

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

但是使用 .values(..) 通常不是一个好主意。通常,您将 Book object 提取到内存中,例如:

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

但即便如此,也有可能有多本书(或根本没有书)使用该名称。所以你应该使用 .filter(..) 来获得 QuerySet of Books。 QuerySet 是一个 lazy 集合,因此可以包含零个、一个或多个 Book 对象:

books = Books.objects.filter(book_name=my_book_name)

我不知道你为什么要使用 get with filter!试试这个

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

对于具有 book_name=my_book_name

的所有条目,这将 return book_id