class GroupListSerializer(serializers.ModelSerializer): image = ImageSerializer() relationship_theme = ChoiceDisplayField(choices=ThemeChoices.THEMES) group_type = ChoiceDisplayField(choices=ComminityTypeChoices.TYPES) requests_count = serializers.SerializerMethodField() request = serializers.SerializerMethodField() def get_requests_count(self, obj): return obj.requests.filter( status=MembershipRequest.STATUS_WAITING_MODERATION).count() def get_request(self, obj): user = self.context["request"].user request = obj.requests.filter(user=user).first() if request: return request.pk class Meta: model = Group fields = ( "pk", "slug", "name", "image", "description", "relationship_theme", "group_type", "creator", "moderators", "users", "requests_count", "request", )
class UserListSerializer(serializers.ModelSerializer): city = CitySerializer() role = ChoiceDisplayField(choices=User.ROLES) approver = UserSerializer() avatar = ImageSerializer() role = ChoiceDisplayField(choices=User.ROLES) gender = ChoiceDisplayField(choices=User.GENDERS) relationship_formats = ChoiceDisplayField(choices=User.FORMATS) relationship_themes = ChoiceDisplayField(choices=ThemeChoices.THEMES) class Meta: model = User fields = ( "pk", "slug", "name", "avatar", "email", "is_real", "approver", "role", "about", "is_ban", "gender", "relationship_formats", "relationship_themes", "birthday", "birthday_second", "city", )
class PartyListSerializer(serializers.ModelSerializer): image = ImageSerializer() city = CitySerializer() club = ClubPartySerializer() theme = ChoiceDisplayField(choices=ThemeChoices.THEMES) party_type = ChoiceDisplayField(choices=ComminityTypeChoices.TYPES) users = serializers.SerializerMethodField() user_status = serializers.SerializerMethodField() def get_users(self, obj): # TODO optimization return (PartyUser.objects.filter(party=obj).exclude( status__in=(PartyUser.STATUS_UNKNOWN, )).values_list("user_id", flat=True)) def get_user_status(self, obj): # TODO optimization user = self.context["request"].user party_user = PartyUser.objects.filter(party=obj, user=user).first() if party_user: return party_user.status else: return PartyUser.STATUS_UNKNOWN class Meta: model = Party fields = ( "pk", "slug", "club", "name", "image", "short_description", "description", "party_type", "city", "users", "views", "likes", "comments_count", "hash_tags", "theme", "start_date", "end_date", "city", "address", "geo", "status", "user_status", )
class FriendSearchSerializer(UserSerializer): role = ChoiceDisplayField(choices=User.ROLES) gender = ChoiceDisplayField(choices=User.GENDERS) relationship_formats = ChoiceDisplayField(choices=User.FORMATS) relationship_themes = ChoiceDisplayField(choices=ThemeChoices.THEMES) request = serializers.SerializerMethodField() chat = serializers.SerializerMethodField() def get_request(self, obj): user = self.context["request"].user request = obj.requests.filter(user=user).first() if request: return request.pk def get_chat(self, obj): user = self.context["request"].user if user == obj: return chat = Chat.objects.user_chats(user).filter( chat_type=Chat.TYPE_CONVERSATION, users=obj).first() if chat: return chat.pk class Meta: model = User fields = ( "pk", "slug", "name", "avatar", "online", "last_seen", "city", "about", "role", "gender", "relationship_formats", "relationship_themes", "birthday", "birthday_second", "is_real", "request", "chat", )
class MediaFolderItemSerializer(serializers.ModelSerializer): show_media = ChoiceDisplayField(choices=AccessChoices.ACCESS) media = serializers.SerializerMethodField() def get_media(self, obj): media = obj.media.filter(media_type=Media.TYPE_PHOTO, is_deleted=False).order_by("views")[:4] serializer = MediaItemSerializer(media, many=True, context=self.context) return serializer.data class Meta: model = MediaFolder fields = ("pk", "name", "show_media", "creator", "media")
class NewsItemSerializer(serializers.ModelSerializer): image = ImageSerializer() creator = UserSerializer() news_type = ChoiceDisplayField(choices=News.TYPES) likes = serializers.SerializerMethodField() views = serializers.SerializerMethodField() comments_count = serializers.SerializerMethodField() def get_likes(self, obj): parent = obj.content_object if parent and hasattr(parent, "likes"): return parent.likes.all().values_list("pk", flat=True) return obj.likes.all().values_list("pk", flat=True) def get_views(self, obj): parent = obj.content_object if parent and hasattr(parent, "views"): return parent.views return obj.views def get_comments_count(self, obj): parent = obj.content_object if parent and hasattr(parent, "comments_count"): return parent.comments_count return obj.comments_count class Meta: model = News fields = ( "pk", "news_type", "slug", "object_id", "title", "image", "creator", "description", "publish_date", "views", "likes", "comments_count", "hash_tags", )
class PostListSerializer(serializers.ModelSerializer): creator = UserSerializer() theme = ChoiceDisplayField(choices=Post.THEMES) image = ImageSerializer() class Meta: model = Post fields = ( "pk", "slug", "image", "title", "description", "theme", "likes", "views", "creator", "status", "is_ban", )
class PostItemSerializer(serializers.ModelSerializer): image = ImageSerializer() theme = ChoiceDisplayField(choices=Post.THEMES) class Meta: model = Post fields = ( "pk", "slug", "title", "image", "description", "views", "likes", "comments_count", "creator", "status", "theme", "is_whisper", )
class NewsSerializer(serializers.ModelSerializer): image = ImageSerializer() creator = UserSerializer() news_type = ChoiceDisplayField(choices=News.TYPES) class Meta: model = News fields = ( "pk", "news_type", "slug", "object_id", "title", "image", "creator", "description", "news", "publish_date", "views", "likes", "comments_count", "hash_tags", )
class MediaFolderSerializer(serializers.ModelSerializer): show_media = ChoiceDisplayField(choices=AccessChoices.ACCESS) class Meta: model = MediaFolder fields = ("pk", "name", "show_media", "creator")
class ProfileSerializer(UserSerializer): approver = UserSerializer() friends = UserSerializer(many=True) online_friends = UserSerializer(many=True) role = ChoiceDisplayField(choices=User.ROLES) gender = ChoiceDisplayField(choices=User.GENDERS) relationship_formats = ChoiceDisplayField(choices=User.FORMATS) relationship_themes = ChoiceDisplayField(choices=ThemeChoices.THEMES) phone = serializers.SerializerMethodField() skype = serializers.SerializerMethodField() chat = serializers.SerializerMethodField() request = serializers.SerializerMethodField() def get_chat(self, obj): user = self.context["request"].user if user == obj: return chat = Chat.objects.user_chats(user).filter( chat_type=Chat.TYPE_CONVERSATION, users=obj).first() if chat: return chat.pk def get_request(self, obj): user = self.context["request"].user request = obj.requests.filter(user=user).first() if request: return request.pk def get_phone(self, obj): user = self.context["request"].user if user.pk == obj.pk or obj.friends.filter(pk=user.pk).exists(): return obj.phone def get_skype(self, obj): user = self.context["request"].user if user.pk == obj.pk or obj.friends.filter(pk=user.pk).exists(): return obj.skype class Meta: model = User fields = ( "pk", "slug", "email", "name", "phone", "skype", "avatar", "birthday", "birthday_second", "about", "online", "last_seen", "role", "is_real", "approver", "city", "friends", "online_friends", "gender", "relationship_formats", "relationship_themes", "social_links", "chat", "request", "black_list", )