def get_resource_name_from_id_field(self, field_name, id_field): parent_serializer = get_parent_serializer(id_field) if isinstance(id_field, dja_serializers.ResourceRelatedField): return id_field.get_resource_type_from_included_serializer() elif isinstance(id_field, serializers.Serializer): return json_api_utils.get_resource_type_from_serializer(id_field) # Other kinds of fields if hasattr(id_field, 'model'): model = id_field.model elif hasattr(id_field, 'get_queryset') and id_field.get_queryset(): model = id_field.get_queryset().model # If the RelatedField hasn't got a queryset, take model from the serializer and find proper model field else: serializer_meta = getattr(parent_serializer, 'Meta', None) this_model = getattr(serializer_meta, 'model', None) source = getattr(id_field, 'source', '') or id_field.field_name if not source and isinstance(id_field.parent, serializers.ManyRelatedField): source = getattr(id_field.parent, 'source', '') or id_field.parent.field_name model = get_related_model(this_model, source) # Resource name from model if model: return get_resource_type_from_model(model) raise ValueError( f"Unable to extract resource name for {parent_serializer}.{field_name} serializer field" )
def to_internal_value(self, data): if data['type'] != get_resource_type_from_model(self.model_class): self.fail('incorrect_model_type', model_type=self.model_class, received_type=data['type']) try: return get_instance_from_id(self.model_class, data['id']) except ObjectDoesNotExist: self.fail('does_not_exist', pk_value=data['id']) except (TypeError, ValueError): self.fail('incorrect_type', data_type=type(data['id']).__name__)
def to_internal_value(self, data): if data['type'] != get_resource_type_from_model(self.model_class): self.fail('incorrect_model_type', model_type=self.model_class, received_type=data['type']) pk = data['id'] try: return self.model_class.objects.get(pk=pk) except ObjectDoesNotExist: self.fail('does_not_exist', pk_value=pk) except (TypeError, ValueError): self.fail('incorrect_type', data_type=type(data['pk']).__name__)
def to_internal_value(self, data): if data['type'] != get_resource_type_from_model(self.model_class): self.fail('incorrect_model_type', model_type=self.model_class, received_type=data['type']) pk = data['auction'] try: return self.model_class.objects.get(pk=pk) except ObjectDoesNotExist: self.fail('does_not_exist', pk_value=pk) except (TypeError, ValueError): self.fail('incorrect_type', data_type=type(data['pk']).__name__)
def to_internal_value(self, data): if data["type"] != get_resource_type_from_model(self.model_class): self.fail( "incorrect_model_type", model_type=self.model_class, received_type=data["type"], ) pk = data["id"] try: return self.model_class.objects.get(pk=pk) except ObjectDoesNotExist: self.fail("does_not_exist", pk_value=pk) except (TypeError, ValueError): self.fail("incorrect_type", data_type=type(data["pk"]).__name__)
def get_resource_name_from_related_id_field(self, field_name, id_field): # Unpack ManyRelatedField from many wrapper id_field = getattr(id_field, 'child_relation', None) or id_field # Not very frequent case but different from others if isinstance(id_field, serializers.Serializer): return json_api_utils.get_resource_type_from_serializer(id_field) # Most cases else: # Try to get from included serializers parent_serializer = get_parent_serializer(id_field) if isinstance(id_field, dja_serializers.ResourceRelatedField): resource_name = id_field.get_resource_type_from_included_serializer( ) if resource_name: return resource_name related_model = get_field_related_model(id_field) if related_model: return get_resource_type_from_model(related_model) raise ValueError( f"Unable to extract resource name for {parent_serializer}.{field_name} serializer field" )