profiles: get online status if friend
This commit is contained in:
parent
55d29d5763
commit
743988c883
@ -10,10 +10,30 @@ class ProfileSerializer(serializers.ModelSerializer):
|
|||||||
|
|
||||||
username = serializers.ReadOnlyField(source='user.username')
|
username = serializers.ReadOnlyField(source='user.username')
|
||||||
avatar = serializers.ImageField(required=False)
|
avatar = serializers.ImageField(required=False)
|
||||||
|
online = serializers.SerializerMethodField()
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = ProfileModel
|
model = ProfileModel
|
||||||
fields = ["username", "avatar", "id"]
|
fields = ["username", "avatar", "id", 'online']
|
||||||
|
|
||||||
|
def get_online(self, obj: ProfileModel):
|
||||||
|
from notice.consumers import notice_manager
|
||||||
|
|
||||||
|
user = None
|
||||||
|
request = self.context.get("request")
|
||||||
|
if request and hasattr(request, "user"):
|
||||||
|
user = request.user
|
||||||
|
|
||||||
|
if user is None:
|
||||||
|
return False
|
||||||
|
|
||||||
|
if user.pk == obj.pk:
|
||||||
|
return True
|
||||||
|
|
||||||
|
if not user.profilemodel.is_friend(obj):
|
||||||
|
return None
|
||||||
|
|
||||||
|
return notice_manager.get_consumer_by_user(obj.user) is not None
|
||||||
|
|
||||||
def validate_avatar(self, value):
|
def validate_avatar(self, value):
|
||||||
'''
|
'''
|
||||||
|
@ -16,12 +16,12 @@ class ProfileViewSet(viewsets.ModelViewSet):
|
|||||||
|
|
||||||
def retrieve(self, request, username=None):
|
def retrieve(self, request, username=None):
|
||||||
user = get_object_or_404(User, username=username)
|
user = get_object_or_404(User, username=username)
|
||||||
return Response(self.serializer_class(user.profilemodel).data)
|
return Response(self.serializer_class(user.profilemodel, context={'request': request}).data)
|
||||||
|
|
||||||
def retrieve_id(self, request, pk=None):
|
def retrieve_id(self, request, pk=None):
|
||||||
user = get_object_or_404(User, pk=pk)
|
user = get_object_or_404(User, pk=pk)
|
||||||
return Response(self.serializer_class(user.profilemodel).data)
|
return Response(self.serializer_class(user.profilemodel, context={'request': request}).data)
|
||||||
|
|
||||||
def list(self, request):
|
def list(self, request):
|
||||||
serializer = ProfileSerializer(self.get_queryset(), many=True)
|
serializer = ProfileSerializer(self.get_queryset(), many=True, context={'request': request})
|
||||||
return Response(serializer.data)
|
return Response(serializer.data)
|
||||||
|
Loading…
Reference in New Issue
Block a user