在 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 Book
s。 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
我的 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 Book
s。 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