要按目标属性过滤ManyToMany关系,可以使用Django的Q对象和filter函数来实现。下面是一个示例:
假设我们有两个模型,一个是Book模型,一个是Author模型,它们之间是多对多的关系。
from django.db import models
class Author(models.Model):
name = models.CharField(max_length=100)
class Book(models.Model):
title = models.CharField(max_length=100)
authors = models.ManyToManyField(Author)
现在我们想要按照作者的名字过滤Book对象。可以使用以下代码:
from django.db.models import Q
def filter_books_by_author_name(author_name):
books = Book.objects.filter(authors__name=author_name)
return books
在上面的代码中,我们使用了filter
函数来过滤Book对象。authors__name
表示我们要过滤的是Book对象的authors字段中的name属性。author_name
是我们要过滤的作者的名字。
如果我们要同时过滤多个作者的书籍,可以使用Q
对象和|
操作符来实现。例如:
def filter_books_by_author_names(author_names):
q_objects = Q()
for author_name in author_names:
q_objects |= Q(authors__name=author_name)
books = Book.objects.filter(q_objects)
return books
在上面的代码中,我们使用了Q
对象来创建一个空的查询对象q_objects
,然后遍历author_names
列表,使用|
操作符将每个作者名字的查询条件添加到q_objects
中。最后,我们使用filter
函数来过滤Book对象。
希望以上代码可以帮助到你!
上一篇:按目标查询的Typeorm