После долгих дней поиска решения о том, как отображать вложенные объекты в чванстве, я обнаружил, что следующий python пакет:
django-rest-swagger
не отображать вложенные объекты, если сериализатор содержит вложенные поля (отношения), как я узнал об этом?, проверка на сайте rest-framework о генераторе схем:
https://www.django-rest-framework.org/coreapi/schemas/#third -party-packages
Есть строка, в которой упоминается другой пакет под названием:
drf-yasg
https://drf-yasg.readthedocs.io/en/stable/index.html
Этот пакет имеет улучшенные функции, такие как: вложенные схемы , именованные модели, тела ответа, валидаторы enum / pattern / min / max, параметры формы и т. д. c. Таким образом, я решил установить пакет, выполнив следующие шаги:
pip install -U drf-yasg
После установки пакета вы должны добавить модуль в список модулей в settings.py и некоторые дополнительные настройки, которые я рассмотрел. подходящее:
....
THIRD_APPS = [
'rest_framework',
'rest_framework_swagger',
'django_filters',
'django_celery_beat',
'drf_yasg',
]
INSTALLED_APPS += THIRD_APPS
# Django restframework
REST_FRAMEWORK = {
# Use Django's standard `django.contrib.auth` permissions,
# or allow read-only access for unauthenticated users.
'DEFAULT_PERMISSION_CLASSES': [
# 'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly',
# 'rest_framework.permissions.IsAuthenticated',
# 'rest_framework.permissions.IsAuthenticatedOrReadOnly',
'rest_framework.permissions.AllowAny',
],
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.BasicAuthentication',
],
'DEFAULT_FILTER_BACKENDS': [
'django_filters.rest_framework.DjangoFilterBackend',
],
'COERCE_DECIMAL_TO_STRING': False,
}
SWAGGER_SETTINGS = {
'USE_SESSION_AUTH': True,
'LOGIN_URL': 'rest_framework:login',
'LOGOUT_URL': 'rest_framework:logout',
'DEFAULT_PARSER_CLASSES': [
'rest_framework.parsers.FormParser',
'rest_framework.parsers.MultiPartParser',
'rest_framework.parsers.JSONParser',
],
'JSON_EDITOR': False,
}
затем перейдите к go в мой urls.py и добавьте следующие строки для создания представления схемы:
- Импортируйте необходимые модули на apps / dol / urls.py
from rest_framework import permissions
from drf_yasg.views import get_schema_view
from drf_yasg import openapi
- настройте начальные параметры функции на apps / dol / urls.py , чтобы не отображались все URL-адреса API, я создал переменную dol_patterns для хранения URL-адресов, необходимых для отображения:
app_name = 'module_dol'
dol_patterns = [
url(r'^dol/api/?', include('apps.dol.api.urls')),
]
SchemaView = get_schema_view(
openapi.Info(
title="API Interface Dol",
default_version='v1',
description="API REST",
# terms_of_service="https://www.google.com/policies/terms/",
# contact=openapi.Contact(email="email@yourdomain.com"),
license=openapi.License(name="BSD License"),
),
patterns=dol_patterns,
public=True,
permission_classes=(permissions.AllowAny,),
)
- My main settings / urls.py file:
urlpatterns = [
url(r'^api-auth/?',
include('rest_framework.urls', namespace='rest_framework'),),
url(r'^admin/?', admin.site.urls),
....
....
url(r'^dol/', include('apps.dol.urls', namespace='dol'),),
]
- Здесь мои зарегистрированные URL-адреса apps / dol / urls.py :
urlpatterns = [
......
......
url(r'^swagger(?P<format>\.json|\.yaml)$',
SchemaView.without_ui(cache_timeout=0), name='schema-json'),
url(r'^swagger/$',
SchemaView.with_ui('swagger', cache_timeout=0),
name='schema-swagger-ui'),
url(r'^redoc/$',
SchemaView.with_ui('redoc', cache_timeout=0),
name='schema-redoc'),
url(r'^api/', include('apps.dol.api.urls')),
]
- конечные точки представления на основе классов были созданы с помощью следующих универсальных типов:
from rest_framework.generics import (
CreateAPIView, UpdateAPIView, DestroyAPIView,
)
- вдобавок вот так выглядит мои apps / dol / api / urls.py :
....
....
urlpatterns = [
re_path(r"^registration/?$",
v.ApiDolRegistration.as_view(), name='api-registration'),
re_path(r"warranty/(?P<coupon_number>[0-9]{5,6})/?$",
v.ApiDolWarranty.as_view(), name='api-warranty'),
re_path(r"rejection/(?P<coupon_number>[0-9]{5,6})/?$",
v.ApiDolRejection.as_view(), name='api-removal'),
]
- наконец-то раз он настроен правильно, вы сможете увидеть GUI, например, следующее:
- When ure ready to test the API from the GUI, u will see that the data layer will be editable to modify the json tree :
введите описание изображения здесь
- Последнее замечание о вложенных объектах, чтобы отобразить вложенные объекты, вы должны быть уверены, что поле сериализатора имеет свойство read_only = False , иначе поле не будет отображаться в GUI.
....
....
owner_user = ClientesSerializers(
fields=Client.FIELDS,
read_only=False,
)
class Meta:
....
....
Я очень надеюсь, что предоставленная информация будет кому-то полезна.
Приветствую,