gpt4 book ai didi

django - django中过滤反向关系的输出项

转载 作者:行者123 更新时间:2023-12-04 17:13:34 26 4
gpt4 key购买 nike

我有这些模型:

class Author(models.Model):
name = models.CharField(max_length=50)


class Book(models.Model):
name = models.CharField(max_length=150)
author = models.ForeignKey(Author, on_delete=models.CASCADE, related_name="books")
published_at = models.DateField()
这是我的查询:
Author.objects.filter(books__published_at__ragne=[date_from, date_to]).annotate(books_count=Count('books'))
查询的输出将发送到下面的序列化程序(继承 django rest 框架序列化程序):
class AuthorSerializer(serializers.ModelSerializer):
books_count= serializers.IntegerField(read_only=True)
books = serializers.StringRelatedField(many=True)

class Meta:
model = Author
fields = ['id', 'name', 'books_count', 'books']
AuthorSerializer 输出将是在指定范围内至少出版一本书的所有作者,每个作者出版的书籍数量,以及每个作者所有书籍的字符串表示。 books__published_at__ragne filter 影响输出作者和书籍数量,但不会影响作者书籍。我的意思是对于每个作者,所有的书都会被退回,而不仅仅是在指定范围内出版的书。
我怎样才能用指定的参数过滤书籍?

最佳答案

您可以使用 Prefetch目的:

from django.db.models import Prefetch

Author.objects.filter(
books__published_at__range=[date_from, date_to]
).annotate(books_count=Count('books')).prefetch_related(
Prefetch(
'books',
queryset=Book.objects.filter(published_at__ragne=[date_from, date_to])
)

)
因此,这意味着 books_count将确定在该范围内出版的书籍数量,以及 books列表也将只包含这些书。

关于django - django中过滤反向关系的输出项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69048458/

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