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)
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
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
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)
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)