From b21d20dc0e8920e1fcc1aa43a9e2de9cdf2502f0 Mon Sep 17 00:00:00 2001 From: Tony Thomas Date: Mon, 23 Oct 2017 00:00:41 +0200 Subject: [PATCH 1/2] Add a new field to access external model fields --- rest_framework/fields.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/rest_framework/fields.py b/rest_framework/fields.py index 43fed9aee..8ccd881fb 100644 --- a/rest_framework/fields.py +++ b/rest_framework/fields.py @@ -1844,3 +1844,17 @@ class ModelField(Field): if is_protected_type(value): return value return self.model_field.value_to_string(obj) + + +class ExternalModelField(ModelField): + """ + Create a modelfield of an extenral class by accepting the class name as an + argument. + + This can help a lot while creating complex nested serializers + """ + def __init__(self, model_name, model_field, **kwargs): + super(ExternalModelField, self).__init__( + model_field=model_name()._meta.get_field(model_field), + **kwargs + ) \ No newline at end of file From ebc874f912fe77c42a1adb21182dfbee8a1c16ce Mon Sep 17 00:00:00 2001 From: Tony Thomas Date: Mon, 23 Oct 2017 09:20:46 +0200 Subject: [PATCH 2/2] Add import to serializers/ --- rest_framework/fields.py | 2 +- rest_framework/serializers.py | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/rest_framework/fields.py b/rest_framework/fields.py index 8ccd881fb..b01c2d8da 100644 --- a/rest_framework/fields.py +++ b/rest_framework/fields.py @@ -1857,4 +1857,4 @@ class ExternalModelField(ModelField): super(ExternalModelField, self).__init__( model_field=model_name()._meta.get_field(model_field), **kwargs - ) \ No newline at end of file + ) diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index 59533be1e..df9b6a270 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -57,6 +57,7 @@ from rest_framework.fields import ( # NOQA # isort:skip HiddenField, IPAddressField, ImageField, IntegerField, JSONField, ListField, ModelField, MultipleChoiceField, NullBooleanField, ReadOnlyField, RegexField, SerializerMethodField, SlugField, TimeField, URLField, UUIDField, + ExternalModelField ) from rest_framework.relations import ( # NOQA # isort:skip HyperlinkedIdentityField, HyperlinkedRelatedField, ManyRelatedField,