您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何在Django-rest-framework queryset响应中添加注释数据?

如何在Django-rest-framework queryset响应中添加注释数据?

从get_queryset返回的queryset提供了将要通过序列化程序的内容的列表,该序列化程序控制对象的表示方式。尝试在Book序列化器中添加其他字段,例如:

author_count = serializers.IntegerField(
    source='author_set.count', 
    read_only=True
)

编辑:正如其他人所说,这不是返回许多结果的情况下增加计数的最有效方法,因为它将对每个实例命中数据库。有关更有效的解决方案.

接受的解决方案将在数据库返回结果时访问数据库。对于每个结果,将count查询数据库

问题是要向序列化器添加注释,这比count对响应中的每个项目进行查询要有效得多。

一个解决方案:

models.py

class Author(models.Model):
    name = models.CharField(...)
    other_stuff = models...
    ...

class Book(models.Model):
    author = models.ForeignKey(Author)
    title = models.CharField(...)
    publication_year = models...
    ...

serializers.py

class BookSerializer(serializers.ModelSerializer):
    authors = serializers.IntegerField()

    class Meta:
        model = Book
        fields = ('id', 'title', 'authors')

views.py

class BookViewSet(viewsets.ModelViewSet):
    queryset = Book.objects.annotate(authors=Count('author'))
    serializer_class = BookSerializer
    ...

这样就可以在数据库级别进行计数,避免点击数据库以检索每个返回Book项的作者计数。

Go 2022/1/1 18:23:22 有311人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶