diff --git a/rest_framework/fields.py b/rest_framework/fields.py index 43fed9aee..b01c2d8da 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 + ) 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,