예제 #1
0
    def to_internal_value(self, data):
        file = data.get('file')
        if file:
            file.name = rk_filename(file.name)

        lyric_file = data.get('lyric_file')
        if lyric_file:
            lyric_file.name = rk_filename(lyric_file.name)

        return super(MusicSerializers, self).to_internal_value(data)
예제 #2
0
    def update(self, instance, validated_data):
        request = self.context['request']
        resources = request.data.get('resources')
        resources = json.loads(resources) if resources else None

        with transaction.atomic():
            installer = super(InstallerSerializer,
                              self).update(instance, validated_data)

            if resources is not None:
                origin_resources = instance.resources.all()
                origin_resource_map = {
                    origin_resource.id: origin_resource
                    for origin_resource in origin_resources
                }

                new_resource_instances = []
                for resource in resources:
                    r_id = resource.get('id')
                    if r_id:
                        r_id = int(r_id)
                    _uuid = resource.get('_uuid')
                    if not r_id and not _uuid:
                        continue
                    if r_id and r_id not in origin_resource_map.keys():
                        continue

                    if r_id:
                        origin_resource_instance = origin_resource_map.pop(
                            r_id)
                        file = request.data.get('file_%s' % r_id)
                        if file:
                            resource['name'] = file.name
                            file.name = rk_filename(file.name)
                            resource['file'] = file
                        else:
                            resource.pop('file', None)
                        update_resource(origin_resource_instance, resource)
                    else:
                        file = request.data.get('file_' + _uuid)
                        if file:
                            resource['name'] = file.name
                            file.name = rk_filename(file.name)
                            resource['file'] = file
                        resource_serializer = create_resource(resource)
                        new_resource_instances.append(
                            resource_serializer.instance)

                for resource_instance in origin_resource_map.values():
                    resource_instance.file.delete()
                    resource_instance.delete()

                installer.resources.add(*new_resource_instances)
        return installer
예제 #3
0
 def create(self, validated_data):
     request = self.context['request']
     resources = json.loads(request.data.get('resources') or '[]')
     with transaction.atomic():
         resource_instances = []
         for resource in resources:
             _uuid = resource['_uuid']
             file = request.data.get('file_' + _uuid)
             if file:
                 resource['name'] = file.name
                 file.name = rk_filename(file.name)
                 resource['file'] = file
             resource_serializer = create_resource(resource)
             resource_instances.append(resource_serializer.instance)
         installer = super(InstallerSerializer, self).create(validated_data)
         installer.resources.add(*resource_instances)
     return installer
예제 #4
0
    def to_internal_value(self, data):
        image = data.get('image')
        if image:
            image.name = rk_filename(image.name)

        return super(PictureSerializers, self).to_internal_value(data)
예제 #5
0
    def to_internal_value(self, data):
        cover = data.get('cover')
        if cover:
            cover.name = rk_filename(cover.name)

        return super(TemplateSerializers, self).to_internal_value(data)