def Meta(self): pk_field = self.model._meta.pk type_info = get_basic_type_info(pk_field) model_name = getattr(self.model._meta, 'verbose_name', self.model.__name__) properties = OrderedDict({ self.pk_attname: openapi.Schema(type=type_info['type'], ), '<Other fields>': openapi.Schema( type=openapi.TYPE_STRING, description=mark_safe( f'Other fields of the `{model_name}` object<br>' f'(fields other than `{self.pk_attname}` do not affect API requests)' ), ) }) class _Meta: swagger_schema_fields = { 'type': openapi.TYPE_OBJECT, 'properties': properties, 'title': f'{model_name} Object including "{self.pk_attname}" attribute', } return _Meta
def _get_model_type_info(self, name, model, model_field=None, query_name=None): if model_field: return None _query_name, field_name = self._get_subname(name) query_name = query_name or _query_name related_model = field_insp.get_related_model(model, query_name) related_field = field_insp.get_model_field(related_model, field_name) if related_field is None: return None type_info = field_insp.get_basic_type_info(related_field) if type_info is None: return None # nocv type_info.update({ 'description': ('A unique {} value identifying ' 'instance of this {} sublist.').format(type_info['type'], query_name), }) return type_info
def get_path_parameters(self, path, view_cls): # Get from serializer, not model parameters = [] for variable in sorted(uritemplate.variables(path)): if view_cls.serializer_class: serializer = view_cls.serializer_class() serializer_field = serializer.fields[variable] attrs = get_basic_type_info(serializer_field) or { "type": openapi.TYPE_STRING } description = getattr(serializer_field, "help_text") title = getattr(serializer_field, "label") field = openapi.Parameter( name=variable, title=utils.force_real_str(title), description=utils.force_real_str(description), required=True, in_=openapi.IN_PATH, **attrs, ) parameters.append(field) return parameters