我有一个DRF ListAPIView
,它应该返回所有用户朋友的查询集。为了管理双向友谊,我使用了django-friendship。
以下是get_queryset
的{{1}}功能:
ListAPIView
这会返回FriendshipRequest个查询集。在README.rst文件中,它说使用def get_queryset(self):
return FriendshipRequest.objects.select_related('from_user', 'to_user').filter(
to_user=self.request.user,
viewed__isnull=True).all()
来获取所有用户的未读Friend.objects.unread_requests(user=request.user)
模型实例的列表。但是FriendshipRequest
函数应该返回一个查询集而不是列表。相反,我复制source code(第198行)以获取get_queryset
个实例的查询集。
以下是目前使用的序列化程序:
FriendshipRequest
我还希望序列化class FriendRequestSerializer(serializers.Serializer):
from_user = models.ForeignKey(User, related_name='friendship_requests_sent')
to_user = models.ForeignKey(User, related_name='friendship_requests_received')
created = models.DateTimeField(default=timezone.now)
FriendshipRequest
,但不确定执行此操作需要哪些代码。
但是,即使此用户确实有看不见的好友请求,响应也是以下JSON:
id
此用户确实总共有3个未读好友请求,但为什么它们完全为空?
如果我尝试将序列化程序更改为如下的ModelSerializer:
[
{},
{},
{}
]
状态代码500,内部服务器错误,因为:
class FriendRequestSerializer(serializers.ModelSerializer):
class Meta:
model = FriendshipRequest
fields = ('id', 'from_user', 'to_user', 'created')
如何让AttributeError: 'tuple' object has no attribute 'values'
[01/Aug/2017 10:20:18] "GET /friendship/list-unseen-friend-requests/ HTTP/1.1" 500 16149
函数返回由get_queryset
作为List返回的FriendshipRequest
模型实例的非null查询集?
思想:
如果ListAPIView
最终将查询集转换为列表,而代码ListAPIView
返回Friend.objects.unread_requests(user=request.user)
模型实例列表,那么为什么不使用FriendshipRequest
,覆盖get方法并直接将列表作为JSON返回,无需处理查询集。
唯一的问题是我不知道如何将FriendshipRequest实例列表转换为JSON列表。我认为这是一种更好的方法。
有谁知道怎么做?