From e35b469932935ca536233953e997421752b0b27b Mon Sep 17 00:00:00 2001 From: Bastian Ballmann Date: Tue, 31 Jan 2023 10:59:41 +0100 Subject: [PATCH] exclude translated fields in serializer --- README.md | 11 +++++++++++ parler_rest/fields.py | 7 +++++++ 2 files changed, 18 insertions(+) diff --git a/README.md b/README.md index 484d096..4bad818 100644 --- a/README.md +++ b/README.md @@ -72,6 +72,17 @@ class CountrySerializer(TranslatableModelSerializer): **Note:** The `TranslatedFieldsField` can only be used in a serializer that inherits from `TranslatableModelSerializer`. +To exclude translated fields you can use the ```exclude_fields``` parameter of TranslatedFieldsField. + +``` +class CountrySerializer(TranslatableModelSerializer): + translations = TranslatedFieldsField(shared_model=Country, exclude_fields=['url']) + + class Meta: + model = Country + fields = ('id', 'country_code', 'translations') +``` + This will expose the fields as a separate dictionary in the JSON output: diff --git a/parler_rest/fields.py b/parler_rest/fields.py index 588a8a1..662c374 100644 --- a/parler_rest/fields.py +++ b/parler_rest/fields.py @@ -28,6 +28,7 @@ def __init__(self, *args, **kwargs): """ self.serializer_class = kwargs.pop('serializer_class', None) self.shared_model = kwargs.pop('shared_model', None) + self.exclude_fields = kwargs.pop('exclude_fields', []) self.allow_empty = kwargs.pop('allow_empty', False) super(TranslatedFieldsField, self).__init__(*args, **kwargs) @@ -108,7 +109,13 @@ def to_representation(self, value): # Split into a dictionary per language result = OrderedDict() + for translation in translations: + if self.exclude_fields: + for ex in self.exclude_fields: + if serializer.fields.get(ex): + del serializer.fields[ex] + result[translation.language_code] = serializer.to_representation(translation) return result