def _get_id_field(self, serializer):
if isinstance(serializer, HyperlinkedModelSerializer):
return serializer.url_field_name
else:
return None
python类HyperlinkedModelSerializer()的实例源码
nested_proxy.py 文件源码
项目:django-rest-framework-tricks
作者: barseghyanartur
项目源码
文件源码
阅读 25
收藏 0
点赞 0
评论 0
def update(self, instance, validated_data):
"""Update.
:param instance:
:param validated_data:
:return:
"""
# Collect information on nested serializers
__nested_serializers, __nested_serializers_data = \
extract_nested_serializers(
self,
validated_data,
)
# Update the instance
instance = super(HyperlinkedModelSerializer, self).update(
instance,
validated_data
)
# Assign fields to the `instance` one by one
set_instance_values(
__nested_serializers,
__nested_serializers_data,
instance
)
# Save the instance and return
instance.save()
return instance
def _validate_configuration(self):
meta_cls = getattr(self, 'Meta', None)
if meta_cls is None:
raise ex.ApimasException('`Meta` class cannot be found')
model_fields = getattr(meta_cls, 'model_fields', [])
fields = getattr(meta_cls, 'extra_fields', [])
if not (fields or model_fields):
raise ex.ApimasException(
'`extra_fields` and `model_fields` attributes are not'
' specified')
if not (self.model_ser_cls or self.ser_cls):
raise ex.ApimasException(
'A `ContainerSerializer` must define a `ModelSerializer` class'
' or a `Serializer class')
if not (self.model_ser_cls or self.ser_cls):
raise ex.ApimasException(
'A `ContainerSerializer` must include a ModelSerializer'
' and Serializer class')
if self.model_ser_cls:
mro = inspect.getmro(self.model_ser_cls)
if serializers.HyperlinkedModelSerializer not in mro:
raise ex.ApimasException(
'A model serializer class must inherit'
' `serializers.ModelSerializer`')
if self.ser_cls:
mro = inspect.getmro(self.ser_cls)
if serializers.BaseSerializer not in mro:
raise ex.ApimasException(
'A serializer class must implement'
' `serializers.BaseSerializer`')
return model_fields, fields