From aa5809d1b761d127d57d7883ec7ed2610b8bd25e Mon Sep 17 00:00:00 2001 From: kakulukia Date: Fri, 19 Sep 2014 14:06:33 +0200 Subject: [PATCH 1/8] Update fields.py ImageFields can show_urls=True instead of file names --- rest_framework/fields.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/rest_framework/fields.py b/rest_framework/fields.py index c0253f86b..f69152733 100644 --- a/rest_framework/fields.py +++ b/rest_framework/fields.py @@ -988,6 +988,15 @@ class ImageField(FileField): 'invalid_image': _("Upload a valid image. The file you uploaded was " "either not an image or a corrupted image."), } + + def __init__(self, *args, **kwargs): + self.show_url = kwargs.pop('show_url', False) + super(ImageField, self).__init__(*args, **kwargs) + + def to_native(self, value): + if self.show_url: + return value.url + return value.name def from_native(self, data): """ From 81d84fc897adac35ec6c8dff2dfe146e706a56be Mon Sep 17 00:00:00 2001 From: kakulukia Date: Fri, 19 Sep 2014 14:18:51 +0200 Subject: [PATCH 2/8] Update fields.py fix whitespace bug .. --- rest_framework/fields.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rest_framework/fields.py b/rest_framework/fields.py index f69152733..bbe71ef42 100644 --- a/rest_framework/fields.py +++ b/rest_framework/fields.py @@ -988,7 +988,7 @@ class ImageField(FileField): 'invalid_image': _("Upload a valid image. The file you uploaded was " "either not an image or a corrupted image."), } - + def __init__(self, *args, **kwargs): self.show_url = kwargs.pop('show_url', False) super(ImageField, self).__init__(*args, **kwargs) From 4b4f1bfd4ae7af86a0ada911020bf262eb2a075e Mon Sep 17 00:00:00 2001 From: kakulukia Date: Wed, 1 Oct 2014 14:58:37 +0200 Subject: [PATCH 3/8] Update fields.py --- rest_framework/fields.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rest_framework/fields.py b/rest_framework/fields.py index bbe71ef42..9b54dd271 100644 --- a/rest_framework/fields.py +++ b/rest_framework/fields.py @@ -994,7 +994,7 @@ class ImageField(FileField): super(ImageField, self).__init__(*args, **kwargs) def to_native(self, value): - if self.show_url: + if value and self.show_url: return value.url return value.name From 553cf5540ed0d51e584a9a2012ce1f8dd4a01ef2 Mon Sep 17 00:00:00 2001 From: kakulukia Date: Mon, 13 Oct 2014 16:09:45 +0200 Subject: [PATCH 4/8] allow to work like in django admin which also tries to call the given methon on the object itself try to call the given serializer method on the serializer itself and on the model in that order --- rest_framework/fields.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/rest_framework/fields.py b/rest_framework/fields.py index 9b54dd271..9e709e95c 100644 --- a/rest_framework/fields.py +++ b/rest_framework/fields.py @@ -1047,5 +1047,10 @@ class SerializerMethodField(Field): super(SerializerMethodField, self).__init__(*args, **kwargs) def field_to_native(self, obj, field_name): - value = getattr(self.parent, self.method_name)(obj) + if hasattr(self.parent, self.method_name): + method = getattr(self.parent, self.method_name) + value = method(obj) + else: + method = getattr(obj, self.method_name) + value = method() return self.to_native(value) From a832ae11e991c844aa2e9257f369aebfcaa56a02 Mon Sep 17 00:00:00 2001 From: Andy Grabow Date: Mon, 20 Oct 2014 11:03:47 +0200 Subject: [PATCH 5/8] allow show_url for all file fields --- rest_framework/fields.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/rest_framework/fields.py b/rest_framework/fields.py index bbe71ef42..81bf12875 100644 --- a/rest_framework/fields.py +++ b/rest_framework/fields.py @@ -951,6 +951,7 @@ class FileField(WritableField): def __init__(self, *args, **kwargs): self.max_length = kwargs.pop('max_length', None) self.allow_empty_file = kwargs.pop('allow_empty_file', False) + self.show_url = kwargs.pop('show_url', False) super(FileField, self).__init__(*args, **kwargs) def from_native(self, data): @@ -975,6 +976,8 @@ class FileField(WritableField): return data def to_native(self, value): + if self.show_url: + return value.url return value.name @@ -993,11 +996,6 @@ class ImageField(FileField): self.show_url = kwargs.pop('show_url', False) super(ImageField, self).__init__(*args, **kwargs) - def to_native(self, value): - if self.show_url: - return value.url - return value.name - def from_native(self, data): """ Checks that the file-upload field data contains a valid image (GIF, JPG, From cc254f887370d6149fe8c6d2ac66b5fb5ab61524 Mon Sep 17 00:00:00 2001 From: Andy Grabow Date: Mon, 20 Oct 2014 15:41:24 +0200 Subject: [PATCH 6/8] fix init method for image fields --- rest_framework/fields.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/rest_framework/fields.py b/rest_framework/fields.py index 726f5a408..e50c71f5d 100644 --- a/rest_framework/fields.py +++ b/rest_framework/fields.py @@ -976,7 +976,7 @@ class FileField(WritableField): return data def to_native(self, value): - if self.show_url: + if value and self.show_url: return value.url return value.name @@ -993,7 +993,6 @@ class ImageField(FileField): } def __init__(self, *args, **kwargs): - self.show_url = kwargs.pop('show_url', False) super(ImageField, self).__init__(*args, **kwargs) def from_native(self, data): From 809e17d48777782d8e2e5da0682b1c3cdf3add17 Mon Sep 17 00:00:00 2001 From: kakulukia Date: Fri, 31 Oct 2014 09:34:19 +0100 Subject: [PATCH 7/8] add invalid data to default error messages --- rest_framework/fields.py | 1 + 1 file changed, 1 insertion(+) diff --git a/rest_framework/fields.py b/rest_framework/fields.py index e50c71f5d..90017940b 100644 --- a/rest_framework/fields.py +++ b/rest_framework/fields.py @@ -260,6 +260,7 @@ class WritableField(Field): default_error_messages = { 'required': _('This field is required.'), 'invalid': _('Invalid value.'), + 'invalid_data': _('Invalid data.'), } widget = widgets.TextInput default = None From 246cd5455f3fadb4b45066ff39199edbadd28cc6 Mon Sep 17 00:00:00 2001 From: kakulukia Date: Fri, 31 Oct 2014 09:35:26 +0100 Subject: [PATCH 8/8] use error messages instead of a fixed string --- rest_framework/serializers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index b3db35823..ae2cbdfef 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -274,7 +274,7 @@ class BaseSerializer(WritableField): reverted_data = {} if data is not None and not isinstance(data, dict): - self._errors['non_field_errors'] = ['Invalid data'] + self._errors['non_field_errors'] = [self.error_messages['invalid_data']] return None for field_name, field in self.fields.items():