Add _get_declared_fields process of SerializerMetaclass

This commit is contained in:
hanbin8269 2021-05-11 23:27:35 +09:00
parent 8f225b2947
commit 92e19c5a58

View File

@ -837,21 +837,20 @@ def raise_errors_on_nested_writes(method_name, serializer, validated_data):
class ModelSerializerMetaclass(SerializerMetaclass): class ModelSerializerMetaclass(SerializerMetaclass):
def __new__(cls, *args, **kwargs): def __new__(cls, name, bases, attrs):
name, bases, namespace = args
if name not in ("ModelSerializer","HyperlinkedModelSerializer"): if name not in ("ModelSerializer","HyperlinkedModelSerializer"):
cls._check_meta(name, namespace) cls._check_meta(name, attrs)
attrs['_declared_fields'] = cls._get_declared_fields(bases, attrs)
return super().__new__(cls, *args, **kwargs) return super().__new__(cls, name, bases, attrs)
@classmethod @classmethod
def _check_meta(cls, name, namespace): def _check_meta(cls, name, attrs):
assert namespace["Meta"], ( assert "Meta" in attrs, (
'Class {serializer_class} missing "Meta" attribute'.format( 'Class {serializer_class} missing "Meta" attribute'.format(
serializer_class=name serializer_class=name
) )
) )
assert namespace["Meta"].model, ( assert hasattr(attrs["Meta"], "model"), (
'Class {serializer_class} missing "Meta.model" attribute'.format( 'Class {serializer_class} missing "Meta.model" attribute'.format(
serializer_class=name serializer_class=name
) )