コード例 #1
0
ファイル: apiviews.py プロジェクト: timgates42/django-admin2
class Admin2APISerializer(serializers.HyperlinkedModelSerializer):
    _default_view_name = 'admin2:%(app_label)s_%(model_name)s_api_detail'

    pk = fields.ReadOnlyField()
    __unicode__ = fields.ReadOnlyField(source='__str__')

    def get_extra_kwargs(self):
        extra_kwargs = super(Admin2APISerializer, self).get_extra_kwargs()
        extra_kwargs.update({
            'url': {
                'view_name': self._get_default_view_name(self.Meta.model)
            }
        })
        return extra_kwargs

    def _get_default_view_name(self, model):
        """
        Return the view name to use if 'view_name' is not specified in 'Meta'
        """
        model_meta = model._meta
        format_kwargs = {
            'app_label': model_meta.app_label,
            'model_name': model_meta.object_name.lower()
        }
        return self._default_view_name % format_kwargs
コード例 #2
0
ファイル: serializers.py プロジェクト: zinhaa/keepswin
class HerbariumRawSerializer(serializers.ModelSerializer):

    name = fields.ReadOnlyField(source='kind.__str__', )

    kind_key = fields.ReadOnlyField(source='kind.key', )

    seasons = SeasonSerializer(many=True, )

    class Meta:
        model = Herbarium
        fields = 'name latin_name description seasons photo kind_key'.split()
コード例 #3
0
class UserSerializer(serializers.HyperlinkedModelSerializer):
    username = fields.ReadOnlyField()
    first_name = fields.SerializerMethodField('get_first_name_to_friend')
    last_name = fields.SerializerMethodField('get_last_name_to_friend')
    isFriend = fields.SerializerMethodField('check_friend')

    class Meta:
        model = User
        fields = ('id', 'username', 'first_name', 'last_name', 'avatar',
                  'isFriend')
        depth = 3

    def get_first_name_to_friend(self, obj):
        request = self.context['request']

        if obj.friends.filter(friend__id=request.user.id).exists(
        ) or request.user.is_staff or obj == request.user:
            return obj.first_name
        return None

    def get_last_name_to_friend(self, obj):
        request = self.context['request']
        if obj.friends.filter(friend__id=request.user.id).exists(
        ) or request.user.is_staff or obj == request.user:
            return obj.last_name
        return None

    def check_friend(self, obj):
        return obj.friends.all().filter(
            author=self.context['request'].user).exists()
コード例 #4
0
ファイル: serializers.py プロジェクト: dbogdanov/dunya
class DocumentSerializer(serializers.ModelSerializer):
    # The slug field isn't part of a SourceFile, but we get it from the filetype
    sourcefiles = serializers.SlugRelatedField(many=True,
                                               slug_field='slug',
                                               read_only=True)
    derivedfiles = fields.ReadOnlyField(source='derivedmap', read_only=True)
    collections = serializers.SlugRelatedField(many=True,
                                               slug_field='slug',
                                               read_only=True)

    class Meta:
        model = models.Document
        fields = [
            'collections', 'derivedfiles', 'sourcefiles',
            'external_identifier', 'title'
        ]

    def create(self, validated_data):
        args = self.context["view"].kwargs
        collection = validated_data.pop('collection')
        rel_collection = get_object_or_404(models.Collection, **collection)
        external = args["external_identifier"]
        document, created = models.Document.objects.get_or_create(
            collections=collection,
            external_identifier=external,
            defaults=validated_data)
        return document
コード例 #5
0
class ParticipantSerializer(ModelSerializer):
    user = UserSerializer()
    position = geo_fields.PointField(str_points=True)
    crisis = fields.ReadOnlyField(source="crisis_id")

    class Meta:
        model = Participant
        fields = "__all__"
コード例 #6
0
class HerbariumRawSerializer(serializers.ModelSerializer):

    kind_key = fields.ReadOnlyField(source="kind.key", )

    seasons = SeasonSerializer(many=True, )

    class Meta:
        model = Herbarium
        fields = "name latin_name description seasons photo kind_key".split()
コード例 #7
0
class UserRetrieveSerializer(serializers.ModelSerializer):
    """
    Сериализатор пользователя
    """

    role_display = fields.ReadOnlyField(source='get_role_display')

    class Meta:
        model = User
        fields = ('id', 'comment_author_name', 'role_display')
コード例 #8
0
class BaseSnippetSerializer(serializers.ModelSerializer):
    id = fields.ReadOnlyField(source='pk')
    title = fields.SerializerMethodField()
    edit_url = fields.SerializerMethodField()

    def get_title(self, instance):
        return str(instance)

    def get_edit_url(self, instance):
        return reverse('wagtailsnippets:edit', args=[instance._meta.app_label, instance._meta.model_name, quote(instance.id)])
コード例 #9
0
ファイル: serializers.py プロジェクト: FrankyTerra/broadcast
class ProfileRetrieveSerializer(serializers.ModelSerializer):
    """
    Сериализатор профиля пользователя
    """

    role_display = fields.ReadOnlyField(source='get_role_display')

    class Meta:
        model = User
        fields = ('id', 'email', 'first_name', 'last_name', 'middle_name',
                  'role_display')
コード例 #10
0
    def test_get_field_names(self):
        def check(serializer, expected):
            self.assertListEqual(serializer.get_field_names(), expected)

        check(self.create_serializer(Person),
              ['name', 'length', 'birth_date'])
        check(self.create_serializer(Person, meta={'fields': ['name', 'length']}),
              ['name', 'length'])
        check(self.create_serializer(Person, meta={'fields': serializers.ALL_FIELDS}),
              ['name', 'length', 'birth_date'])
        check(self.create_serializer(Person, meta={'fields': (serializers.ALL_FIELDS, 'age')}),
              ['age', 'name', 'length', 'birth_date'])
        check(self.create_serializer(Person, meta={'fields': ('age', )}),
              ['age'])
        check(self.create_serializer(Person, meta={'exclude': ['name']}),
              ['length', 'birth_date'])
        check(self.create_serializer(Person, declared={'age': fields.ReadOnlyField()}),
              ['age', 'name', 'length', 'birth_date'])

        # invalid `fields` specification
        with self.assertRaises(TypeError):
            self.create_serializer(Person, meta={'fields': 'invalid'}).get_field_names()

        # invalid `exclude` specification
        with self.assertRaises(TypeError):
            self.create_serializer(Person, meta={'exclude': 'invalid'}).get_field_names()

        # declared field not in `fields`
        with self.assertRaises(AssertionError):
            self.create_serializer(Person,
                                   declared={'name': fields.SlugField()},
                                   meta={'fields': ['length']}).get_field_names()

        # declared field in `exclude`
        with self.assertRaises(AssertionError):
            self.create_serializer(Person,
                                   declared={'name': fields.SlugField()},
                                   meta={'exclude': ['name']}).get_field_names()

        # non-existing field in `fields`
        with self.assertRaises(AssertionError):
            self.create_serializer(Person, meta={'fields': ['nonexisting']}).get_field_names()

        # non-existing field in `exclude`
        with self.assertRaises(AssertionError):
            self.create_serializer(Person, meta={'exclude': ['nonexisting']}).get_field_names()

        # both `fields` and `exclude` specified
        with self.assertRaises(AssertionError):
            self.create_serializer(Person, meta={'fields': ['name'], 'exclude': ['length']}).get_field_names()
コード例 #11
0
class PostSerializer(serializers.ModelSerializer):
    comments = CommentSerializer(many=True, read_only=True)
    author = fields.ReadOnlyField(source='author.username')

    class Meta:
        model = Post
        fields = ['id', 'content', 'created_at', 'author', 'comments']

    def create(self, validated_data):
        user = self.context['request'].user
        return Post.objects.create(author=user,
                                   content=validated_data['content'])

    def update(self, instance, validated_data):
        instance.content = validated_data['content']
        instance.save()
        return instance
コード例 #12
0
ファイル: serializers.py プロジェクト: waseem18/zamboni
class FeedbackSerializer(PotatoCaptchaSerializer):
    feedback = fields.CharField(allow_blank=False)
    chromeless = fields.CharField(required=False)
    from_url = fields.CharField(required=False)
    user = fields.ReadOnlyField(required=False)
    platform = fields.CharField(required=False, allow_null=True)

    def to_representation(self, attrs):
        attrs = super(FeedbackSerializer, self).to_representation(attrs)
        if not attrs.get('platform'):
            attrs['platform'] = self.request.GET.get('dev', '')
        if self.request.user.is_authenticated():
            attrs['user'] = unicode(self.request.user)
        else:
            attrs['user'] = None

        return attrs
コード例 #13
0
class ReplySerializer(serializers.ModelSerializer):
    author = fields.ReadOnlyField(source='author.username')

    class Meta:
        model = Reply
        fields = ['id', 'content', 'created_at', 'author', 'comment']

    def create(self, validated_data):
        user = self.context['request'].user
        comment = validated_data['comment']
        return Reply.objects.create(author=user,
                                    comment=comment,
                                    content=validated_data['content'])

    def update(self, instance, validated_data):
        instance.content = validated_data['content']
        instance.save()
        return instance
コード例 #14
0
class UserSerializer(serializers.ModelSerializer):
    """
    UserProxy model serializer that takes optional `with_secret_key` argument
    that controls whether the secret_key for the user should be displayed.
    """
    def __init__(self, *args, **kwargs):
        # Don't pass `with_secret_key` up to the superclass
        self.with_secret_key = kwargs.pop('with_secret_key', None)
        super(UserSerializer, self).__init__(*args, **kwargs)

        # If we haven't passed `with_secret_key`, don't show the secret_key
        # field.
        if self.with_secret_key is None:
            self.fields.pop('secret_key')

    permissions = fields.ReadOnlyField(source='get_permissions')

    class Meta:
        model = get_user_model()
        fields = ('id', 'email', 'permissions', 'secret_key')
コード例 #15
0
class CommentSerializer(serializers.ModelSerializer):
    replies = ReplySerializer(many=True, read_only=True)
    post = serializers.PrimaryKeyRelatedField(queryset=Post.objects.all(),
                                              required=False)
    author = fields.ReadOnlyField(source='author.username')

    class Meta:
        model = Comment
        fields = ['id', 'content', 'created_at', 'author', 'replies', 'post']

    def create(self, validated_data):
        user = self.context['request'].user
        post = validated_data['post']
        return Comment.objects.create(author=user,
                                      post=post,
                                      content=validated_data['content'])

    def update(self, instance, validated_data):
        instance.content = validated_data['content']
        instance.save()
        return instance
コード例 #16
0
class UserSerializer(serializers.HyperlinkedModelSerializer):
    first_login = fields.ReadOnlyField(source='userprofile.first_login')
    followed_tags = TagNameSerializer(source='userprofile.followed_tags',
                                      many=True)
    saved_places = FixedHyperlinkedRelatedField(
        view_name='place-detail',
        source='userprofile.saved_places',
        many=True,
        read_only=True)

    class Meta:
        model = User
        fields = ('url', 'username', 'first_login', 'first_name', 'last_name',
                  'followed_tags', 'saved_places')

    def to_representation(self, instance):
        data = super(UserSerializer, self).to_representation(instance)
        if self.context['request'].user != instance:
            del data['followed_tags']
            del data['saved_places']
        return data

    def create(self, validated_data):
        raise NotImplementedError('No creation via JSON')

    def update(self, instance, validated_data):
        for attr, value in validated_data.items():
            if attr == 'userprofile':
                continue
            setattr(instance, attr, value)

        instance.save()

        instance.userprofile.followed_tags.clear()
        for tagname in validated_data['userprofile']['followed_tags']:
            instance.userprofile.followed_tags.add(
                Tag.objects.get(name=tagname))
        instance.userprofile.save()

        return instance
コード例 #17
0
 def build_property_field(self, field_name, info):
     return fields.ReadOnlyField()
コード例 #18
0
class SourceSerializer(serializers.HyperlinkedModelSerializer):
    """
    Source serializer for main/database orm.

    TODO: fileRef_id and collection_id should be checked to belong to the
          same organisation as the source.
    """

    fileRef = FileSerializer(allow_null=True, required=False, read_only=True)
    annotations = AnnotationSerializer(many=True, read_only=True)

    # Writable related fields - see create / update for how to manually
    # deal with it upon serialization
    tags = TagSerializer(allow_null=True,
                         required=False,
                         many=True,
                         read_only=False)

    stories = StorySerializer(allow_null=True,
                              required=False,
                              many=True,
                              read_only=False)

    collection = CollectionSerializer(allow_null=True,
                                      required=False,
                                      read_only=True)

    # Force serializer to accept the id directly
    fileRef_id = fields.IntegerField(required=False, allow_null=True)

    # For setting collection
    collection_id = fields.IntegerField(required=False, allow_null=True)

    shareUrl = fields.ReadOnlyField()
    downloadUrl = fields.ReadOnlyField()

    owner = UserSerializer(read_only=True)

    class Meta:
        model = Source
        fields = ('id', 'title', 'description', 'sourcetype', 'stories',
                  'tags', 'public', 'collection', 'collection_id', 'sourceId',
                  'sourceURL', 'externalServiceId', 'externalServiceName',
                  'embedId', 'fileRef', 'fileRef_id', 'annotations',
                  'shareUrl', 'downloadUrl', 'owner', 'language', 'country',
                  'date', 'publishedDate', 'created_at', 'updated_at')

    def create(self, validated_data):
        """
        Custom create - saves tags + stories.
        """
        tagNames = self._popRelatedList(validated_data, 'tags')
        storiesNames = self._popRelatedList(validated_data, 'stories')

        # Create via base class after validated_data was cleaned
        instance = super().create(validated_data)

        tagObjects = [
            Tag.getOrCreate(t, instance.organisation) for t in tagNames
        ]
        instance.tags.set(tagObjects)
        storiesObjects = [
            Story.getOrCreate(t, instance.organisation) for t in storiesNames
        ]
        instance.stories.set(storiesObjects)

        return instance

    def update(self, instance, validated_data):
        """
        Custom update - saves tags + stories.
        """
        tagNames = self._popRelatedList(validated_data, 'tags')
        storiesNames = self._popRelatedList(validated_data, 'stories')

        tagObjects = [
            Tag.getOrCreate(t, instance.organisation) for t in tagNames
        ]
        instance.tags.set(tagObjects)
        storiesObjects = [
            Story.getOrCreate(t, instance.organisation) for t in storiesNames
        ]
        instance.stories.set(storiesObjects)

        return super().update(instance, validated_data)

    def _popRelatedList(self, validated_data, attr_name):
        items = validated_data.pop(attr_name) \
                if attr_name in validated_data else None
        items = items if items is not None else []
        itemNames = [t['name'] for t in items]
        return itemNames