gpt4 book ai didi

python - 如何查询django m2m满足多个要求的单个实例?

转载 作者:行者123 更新时间:2023-11-30 23:05:12 25 4
gpt4 key购买 nike

为了举例,我有以下 Django 模型:

class Author(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)

class Book(models.Model):
name = models.CharField(max_length=30)
authors = models.ManyToManyField(Author)

(因为书籍通常有多个作者,而作者通常会写多本书)

现在假设我有一个作为元组的作者姓名列表:

author_list = [('clarke', 'arthur'), ('herbert', 'frank'), ('asimov', 'isaac')]

有没有一种方法可以查询其 authors m2m 字段至少有一个 Author 实例满足的所有图书

author.last_name = pair[0]
author.first_name = pair[1]

对于author_list中的某些对? IE。获取至少由给定作者列表中的一位作者贡献的所有书籍?

我*想要*编写的查询如下所示:

Book.objects.filter(
authors__first_name__in=[pair[1] for pair in author_list],
authors__last_name__in=[pair[0] for pair in author_list]
)

但这不起作用,因为这样所有排列(Arthur Herbert、Frank Asimov、Isaac Clarke 等)都是允许的。但我不知道该怎么说,本质上是:

“选择所有拥有同时满足这两个条件的作者的图书。”

或者真的:

“选择其作者(姓氏、名字)在此元组列表中的所有书籍。”

有没有一种干净的方法在 django 中进行搜索?

最佳答案

您可以build a query using Q objects.

根据您的答案,但不使用 reduceoperator:

query = Q()
for last_name, first_name in author_list:
Q |= Q(authors__last_name=last_name, authors__first_name=first_name)
Book.objects.filter(query)

关于python - 如何查询django m2m满足多个要求的单个实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33290416/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com