使用 Django ORM 中的列过滤器获取主键 ID
Posted
技术标签:
【中文标题】使用 Django ORM 中的列过滤器获取主键 ID【英文标题】:Get Primary key id with Column filter in Django ORM 【发布时间】:2020-05-06 21:37:34 【问题描述】:我的 Postgresql 中有一张 books 表。下图是表结构的样子。
现在,我有 book_name “249”,我想获取其对应的主键 5。下面是我正在尝试执行的查询,但 Django 抛出错误。
我的书名 = 249
books.model.filter(book_name=my_book_name).get('book_id') # Not Working
有人可以建议正确的 ORM 查询来获取 book_name 的相应 book_id 吗?
注意:- 我删除了 PK=4,这就是它在列中丢失的原因。
【问题讨论】:
【参考方案1】:您可以在这里使用.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
的Book
s。 QuerySet
是一个 惰性 集合,因此可以在此处包含零个、一个或多个 Book
对象:
books = Books.objects.filter(book_name=my_book_name)
【讨论】:
【参考方案2】:我不知道你为什么使用 get 过滤器!试试这个
books.objects.filter(book_name=my_book_name).values('book_id')
这将为所有具有 book_name=my_book_name 的条目返回 book_id
【讨论】:
谢谢哥们!..顺便说一句,它应该是“books.objects.filter”而不是“books.model.filter”以上是关于使用 Django ORM 中的列过滤器获取主键 ID的主要内容,如果未能解决你的问题,请参考以下文章
使用 Django ORM 使用 UNION 指定 SELECT 中的列顺序