예제 #1
0
    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
예제 #2
0
 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
예제 #3
0
 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