mirror of
https://github.com/SectorLabs/django-localized-fields.git
synced 2025-04-25 11:42:54 +03:00
refactored LocalizedFieldFile.save method
This commit is contained in:
parent
8ba08c389c
commit
a352388243
@ -17,8 +17,12 @@ from ..forms import LocalizedFileFieldForm
|
|||||||
|
|
||||||
class LocalizedFieldFile(FieldFile):
|
class LocalizedFieldFile(FieldFile):
|
||||||
|
|
||||||
def save(self, name, content, lang, save=True):
|
def __init__(self, instance, field, name, lang):
|
||||||
name = self.field.generate_filename(self.instance, name, lang)
|
super().__init__(instance, field, name)
|
||||||
|
self.lang = lang
|
||||||
|
|
||||||
|
def save(self, name, content, save=True):
|
||||||
|
name = self.field.generate_filename(self.instance, name, self.lang)
|
||||||
self.name = self.storage.save(name, content,
|
self.name = self.storage.save(name, content,
|
||||||
max_length=self.field.max_length)
|
max_length=self.field.max_length)
|
||||||
self._committed = True
|
self._committed = True
|
||||||
@ -50,29 +54,31 @@ class LocalizedFieldFile(FieldFile):
|
|||||||
class LocalizedFileValueDescriptor(LocalizedValueDescriptor):
|
class LocalizedFileValueDescriptor(LocalizedValueDescriptor):
|
||||||
def __get__(self, instance, cls=None):
|
def __get__(self, instance, cls=None):
|
||||||
value = super().__get__(instance, cls)
|
value = super().__get__(instance, cls)
|
||||||
for k, file in value.__dict__.items():
|
for lang, file in value.__dict__.items():
|
||||||
if isinstance(file, six.string_types) or file is None:
|
if isinstance(file, six.string_types) or file is None:
|
||||||
file = self.field.value_class(instance, self.field, file)
|
file = self.field.value_class(instance, self.field, file, lang)
|
||||||
value.set(k, file)
|
value.set(lang, file)
|
||||||
|
|
||||||
elif isinstance(file, File) and \
|
elif isinstance(file, File) and \
|
||||||
not isinstance(file, LocalizedFieldFile):
|
not isinstance(file, LocalizedFieldFile):
|
||||||
file_copy = self.field.value_class(instance, self.field,
|
file_copy = self.field.value_class(instance, self.field,
|
||||||
file.name)
|
file.name, lang)
|
||||||
file_copy.file = file
|
file_copy.file = file
|
||||||
file_copy._committed = False
|
file_copy._committed = False
|
||||||
value.set(k, file_copy)
|
value.set(lang, file_copy)
|
||||||
|
|
||||||
elif isinstance(file, LocalizedFieldFile) and \
|
elif isinstance(file, LocalizedFieldFile) and \
|
||||||
not hasattr(file, 'field'):
|
not hasattr(file, 'field'):
|
||||||
file.instance = instance
|
file.instance = instance
|
||||||
file.field = self.field
|
file.field = self.field
|
||||||
file.storage = self.field.storage
|
file.storage = self.field.storage
|
||||||
|
file.lang = lang
|
||||||
|
|
||||||
# Make sure that the instance is correct.
|
# Make sure that the instance is correct.
|
||||||
elif isinstance(file, LocalizedFieldFile) \
|
elif isinstance(file, LocalizedFieldFile) \
|
||||||
and instance is not file.instance:
|
and instance is not file.instance:
|
||||||
file.instance = instance
|
file.instance = instance
|
||||||
|
file.lang = lang
|
||||||
return value
|
return value
|
||||||
|
|
||||||
|
|
||||||
@ -115,9 +121,9 @@ class LocalizedFileField(LocalizedField):
|
|||||||
"""Returns field's value just before saving."""
|
"""Returns field's value just before saving."""
|
||||||
value = super().pre_save(model_instance, add)
|
value = super().pre_save(model_instance, add)
|
||||||
if isinstance(value, LocalizedValue):
|
if isinstance(value, LocalizedValue):
|
||||||
for lang, file in value.__dict__.items():
|
for file in value.__dict__.values():
|
||||||
if file and not file._committed:
|
if file and not file._committed:
|
||||||
file.save(file.name, file, lang, save=False)
|
file.save(file.name, file, save=False)
|
||||||
return value
|
return value
|
||||||
|
|
||||||
def generate_filename(self, instance, filename, lang):
|
def generate_filename(self, instance, filename, lang):
|
||||||
@ -135,7 +141,7 @@ class LocalizedFileField(LocalizedField):
|
|||||||
for k, v in data.__dict__.items():
|
for k, v in data.__dict__.items():
|
||||||
if v is not None and not v:
|
if v is not None and not v:
|
||||||
data.set(k, '')
|
data.set(k, '')
|
||||||
setattr(instance, self.attname, data)
|
setattr(instance, self.name, data)
|
||||||
|
|
||||||
def formfield(self, **kwargs):
|
def formfield(self, **kwargs):
|
||||||
defaults = {'form_class': LocalizedFileFieldForm}
|
defaults = {'form_class': LocalizedFileFieldForm}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user