def to_representation(self, instance): data = super(UserDetailSerializer, self).to_representation(instance) request = self.context['request'] if not has_version(request, '1.2') or request.user.id != instance.id: del data['settings'] return data
def form(self): form = super(BaseFilterSet, self).form for version in getattr(self.Meta, 'versioned_fields', {}): if utils.has_version(self.request, version): continue for field in self.Meta.versioned_fields[version]: if field in form.fields: del form.fields[field] return form
def to_representation(self, instance): data = super(BaseHyperlinkedModelSerializer, self).to_representation(instance) request = self.context.get('request') for version in getattr(self.Meta, 'versioned_fields', {}): # if the user has requested a version lower that than in which the # field was added, we drop it if not utils.has_version(request, version): for field in self.Meta.versioned_fields[version]: data.pop(field) return data
def update(self, instance, validated_data): settings_data = validated_data.pop('profile', None) request = self.context['request'] if settings_data and has_version(request, '1.2') and ( request.user.id == instance.id): # TODO(stephenfin): We ignore this field rather than raise an error # to be consistent with the rest of the API. We should change this # when we change the overall settings self.fields['settings'].update(instance.profile, settings_data) return super(UserDetailSerializer, self).update( instance, validated_data)
def has_permission(self, request, view): # read-only permission for everything if request.method in permissions.SAFE_METHODS: return True if not utils.has_version(request, '1.2'): raise exceptions.MethodNotAllowed(request.method) if request.method == 'POST' and (not request.user or not request.user.is_authenticated): return False # we have more to do but we can't do that until we have an object return True
def to_representation(self, instance): data = super(BaseHyperlinkedModelSerializer, self).to_representation(instance) request = self.context.get('request') for version in getattr(self.Meta, 'versioned_fields', {}): # if the user has requested a version lower that than in which the # field was added, we drop it if not utils.has_version(request, version): for field in self.Meta.versioned_fields[version]: # After a PATCH with an older API version, we may not see # these fields. If they don't exist, don't panic, return # (and then discard) None. data.pop(field, None) return data