この django アプリをdjango rest Framework(DRF) バックエンド API で使用して、Android アプリのユーザー間の双方向の友情を管理しています。DRF ビューの 1 つで、すべてのユーザーの未読の友達リクエストのクエリセットを返したいと考えています。django-friendship docs では、
未読のフレンド申請をすべて表示:
Friend.objects.unread_requests(user=request.user)
ここに私の ListAPIView があります:
class ListUnseenFriendRequests(generics.ListAPIView):
serializer_class = serializers.FriendRequestSerializer
permission_classes = (IsAuthenticated,)
def get_queryset(self):
return Friend.objects.unread_requests(user=self.request.user)
シリアライザー FriendRequestSerializer は次のようになります。
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)
django-friendship ソース コードのFriendshipRequestモデルと同じフィールド名をシリアライザーで使用します。
サーバーを実行して、対応するエンドポイント /friendship/list-unseen-friend-requests/ に API リクエストを送信すると、JSON レスポンスは次のようになります。
[
{},
{},
{}
]
このユーザーに 3 つの友達リクエストを送信したので、番号は正しいのですが、すべて null です。
フレンドリクエストが null 以外を返すようにするにはどうすればよいですか?
次のように、シリアライザーを ModelSerializer に変更しようとしました。
class FriendRequestSerializer(serializers.ModelSerializer):
class Meta:
model = FriendshipRequest
fields = ('from_user', 'to_user', 'created')
API エンドポイントが呼び出されると、結果は次のようになります。
AttributeError: 'tuple' object has no attribute 'values'
[31/Jul/2017 08:26:32] "GET /friendship/list-unseen-friend-requests/ HTTP/1.1" 500 16150