如何获取表的所有 id/主键列表。假设我有这张桌子:
class Blog(models.Model)
title = models.CharField()
body = models.CharField()
author = models.ForeignKey(Author)
假设字段 author 是 Author 对象。我想获取作者=作者的博客的所有 id
我知道我可以使用
blogs = Blog.objects.filter(author=author)
并以列表形式获取所有博客对象,但我如何获取列表 IDS/PK?类似于“从作者=作者的博客中选择 id”
not_authored_blog = Author.objects.exclude(blog__id__in=blogs)
。我有另一个表,该表具有“博客”的 FK,并且想要获取另一个表中的对象,该表不是“博客”中的 FK。虽然比这更复杂
blog_set
相关经理是否有任何记录来解决此问题;如果它是空的,那么这个作者没有博客。这将比执行您的排除查询要好得多,后者可能被翻译为一个大的 NOT IN
子句。
您可以使用 values_list
方法执行此操作。
blogs = Blog.objects.filter(author=author).values_list('id', flat=True)
在 Django queryset documentation 中查看更多信息。
Blog.objects.filter(author=author).values_list('id', flat=True)
values_list()
给出一个行列表,每行按顺序包含您指定为参数的所有字段的元组。如果您只传入一个字段作为参数,您还可以指定 flat=True
来获取一个普通列表而不是元组列表。
pk
而不是 id
,内部值 pk
将始终指向主键字段,即使它不称为“id”。
Blog.objects.filter(author=author).values_list('pk', flat=True)
将 pk
改为 id
,仅用于最佳做法。
values_list
它在迭代时返回元组。每个元组都包含来自各个字段或表达式的值,这些值被传递到 values_list() 中。
author = Blog.objects.filter(author=author)
ids = author.values_list('pk', flat=True)
# list method get ids without parse the returning queryset
print(list(ids))
不定期副业成功案例分享