class CommentCreateSerializer(serializers.DocumentSerializer): post = fields.ReferenceField(model=Post, required=True, write_only=True) owner = fields.ReferenceField(model=User, required=True) content = serializers.serializers.CharField() class Meta: model = Comment fields = [ 'post', 'content', 'owner', ] extra_kwargs = {'post'} def create(self, validated_data): owner = User.objects().get(id=validated_data['owner'].id) post = Post.objects().get(id=validated_data['post'].id) content = validated_data['content'] newcomment = Comment(owner=owner, content=content) post.add_comment(newcomment) return newcomment def insert(self, post): post.add_comment(self)
class CommentListSerializer(serializers.EmbeddedDocumentSerializer): owner = fields.ReferenceField(model=User, required=True) content = serializers.serializers.CharField() edit_url = serializers.serializers.HyperlinkedIdentityField( view_name='comment-edit', lookup_field='id', ) class Meta: model = Comment fields = [ 'id', 'content', 'owner', 'edit_url', ]
class UploaderSimplelSerializer(serializers.DocumentSerializer): name = serializers.serializers.CharField() birth_day = serializers.serializers.DateTimeField(format="%Y-%m-%d") sex = serializers.serializers.SerializerMethodField() home_town = serializers.serializers.CharField() location = fields.GeoJSONField(geo_type='Point') user = fields.ReferenceField(model=User) post_count = serializers.serializers.SerializerMethodField() posts_url = serializers.serializers.HyperlinkedIdentityField( view_name='post-filter-uploader', lookup_field='id', ) photo_url = serializers.serializers.HyperlinkedIdentityField( view_name='get-photo', lookup_field='id', ) edit_url = serializers.serializers.HyperlinkedIdentityField( view_name='uploader-edit', lookup_field='id', ) class Meta: model = Uploader fields = [ 'id', 'name', 'birth_day', 'sex', 'home_town', 'location', 'user', 'post_count', 'photo_url', 'edit_url', 'posts_url' ] # def get_posts(self,obj): # if obj.query_posts().count() ==0: # return []; # return PostSimpletSerializer(obj.query_posts(),many=True).data def get_post_count(self, obj): return obj.query_posts().count() def get_sex(self, obj): return obj.get_sex_display()
class UploaderListSerializer(serializers.DocumentSerializer): name = serializers.serializers.CharField() birth_day = serializers.serializers.DateTimeField(format="%Y-%m-%d") sex = serializers.serializers.SerializerMethodField() home_town = serializers.serializers.CharField() location = fields.GeoJSONField(geo_type='Point') user = fields.ReferenceField(model=User) photo_url = serializers.serializers.HyperlinkedIdentityField( view_name='get-photo', lookup_field='id', ) edit_url = serializers.serializers.HyperlinkedIdentityField( view_name='uploader-edit', lookup_field='id', ) detail_url = serializers.serializers.HyperlinkedIdentityField( view_name='uploader-retrieve', lookup_field='id', ) class Meta: model = Uploader fields = [ 'id', 'name', 'birth_day', 'sex', 'home_town', 'location', 'user', 'photo_url', 'edit_url', 'detail_url', ] def get_sex(self, obj): return obj.get_sex_display() def get_birth_day(self, obj): logger.debug(type(obj.birth_day)) return obj.birth_day.date()
class UploaderCreateSerializer(serializers.DocumentSerializer): name = serializers.serializers.CharField(write_only=True) birth_day = serializers.serializers.DateTimeField(write_only=True, input_formats=["%Y-%m-%d"]) sex = serializers.serializers.ChoiceField(choices=SEX, write_only=True) photo = fields.ImageField(default=get_default_image(), use_url=True, validators=[validate_photo_size, ], write_only=True) home_town = serializers.serializers.CharField(write_only=True) location = fields.GeoPointField(write_only=True) user = fields.ReferenceField(model=User, write_only=True) class Meta: model = Uploader fields = [ 'id', 'name', 'birth_day', 'sex', 'photo', 'home_town', 'location', 'user', ]