diff --git a/localized_fields/fields/file_field.py b/localized_fields/fields/file_field.py index 76980d7..49bbf86 100644 --- a/localized_fields/fields/file_field.py +++ b/localized_fields/fields/file_field.py @@ -1,3 +1,4 @@ +import json import datetime import posixpath @@ -149,3 +150,11 @@ class LocalizedFileField(LocalizedField): defaults['required'] = False defaults.update(kwargs) return super().formfield(**defaults) + + def value_to_string(self, obj): + value = self.value_from_object(obj) + if isinstance(value, LocalizedFileValue): + return json.dumps({k: v.name for k, v + in value.__dict__.items()}) + else: + return super().value_to_string(obj) diff --git a/tests/test_file_field.py b/tests/test_file_field.py index 00a8975..923ebb8 100644 --- a/tests/test_file_field.py +++ b/tests/test_file_field.py @@ -2,6 +2,7 @@ import os import shutil import tempfile as sys_tempfile import pickle +import json from django import forms from django.test import TestCase, override_settings @@ -118,6 +119,20 @@ class LocalizedFileFieldTestCase(TestCase): filename = field.generate_filename(instance, 'test', 'en') assert filename == 'en_test' + @classmethod + @override_settings(LANGUAGES=(('en', 'English'),)) + def test_value_to_string(cls): + """Tests whether the :see:LocalizedFileField + class's :see:value_to_string function works properly.""" + + temp_file = File(tempfile.NamedTemporaryFile()) + instance = cls.FileFieldModel() + field = cls.FileFieldModel._meta.get_field('file') + field.upload_to = '' + instance.file.en.save('testfilename', temp_file) + expected_value_to_string = json.dumps({'en': 'testfilename'}) + assert field.value_to_string(instance) == expected_value_to_string + @staticmethod def test_get_prep_value(): """Tests whether the :see:get_prep_value function returns correctly