【发布时间】:2021-11-02 00:05:44
【问题描述】:
我有这些模型:
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 过滤器会影响输出作者和书籍数量,但不会影响作者的书籍。我的意思是对于每个作者,所有的书都会被退回,而不仅仅是在指定范围内出版的书。
我怎样才能过滤具有指定参数的书籍?
【问题讨论】:
标签: django django-models django-rest-framework django-queryset