【发布时间】:2020-06-30 17:00:15
【问题描述】:
我有一个视图设置为向用户返回书籍列表,该列表是从基于当前登录用户的简单书籍模型中检索的。但是,我也有 ReadingSession 模型,它与 Book 和 User 都有外键关系。
当我为用户检索书籍时,我至少希望返回一个主键列表,我可以使用这些主键在我的客户端中获取长度。
以下代码将在我的 BookSerializer 中获取完整的阅读会话集:
from rest_framework import serializers
from books.models import Book
class BookSerializer(serializers.ModelSerializer):
readingsession_set = serializers.PrimaryKeyRelatedField(
many=True, read_only=True)
class Meta:
model = Book
fields = ["id", "title", "author", "publisher",
"publish_date", "description", "category",
"language", "small_thumbnail", "thumbnail",
"readingsession_set"]
但是,这样做的问题是它会返回所有阅读会话,而不管会话是否属于该用户。
我希望能够对其进行过滤,以便它只返回当前用户的阅读会话。大致如下:
readingsession_set = serializers.PrimaryKeyRelatedField(queryset=ReadingSession.objects.filter(user=user), read_only=True)
但我尝试了各种尝试从 APIView 传递用户 (self.request.user) 的方法,但似乎都不起作用。我尝试过传递上下文,并尝试在 __init__ 中传递额外的 **kwargs,但似乎都没有。
有没有办法做到这一点?还是我采取了错误的方法?
谢谢
【问题讨论】: