Django-filter: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЪреЗрддрд╛рд╡рдиреА: рдПрдХреНрд╕ рд╕реНрдХреАрдорд╛ рдкреАрдврд╝реА рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рдирд╣реАрдВ рд╣реИ: рдмреЗрдирд╛рдореА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдХрд╛рд░рдг

рдХреЛ рдирд┐рд░реНрдорд┐рдд 13 рдЕрдЧре░ 2018  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: carltongibson/django-filter

рдореИрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЪреЗрддрд╛рд╡рдиреА рдХреЛ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ https://github.com/carltongibson/django-filter/pull/903 рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдмрдврд╝рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ:

тАж/django-filter/django_filters/rest_framework/backends.py:131: UserWarning: <class 'project.app.views.TermsOfServiceViewSet'> is not compatible with schema generation
  "{} is not compatible with schema generation".format(view.__class__)

рд╡реЗ рдЬреНрдпрд╛рджрд╛рддрд░ рдЗрд╕рд▓рд┐рдП рд╣реЛрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рдмреЗрдирд╛рдореА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╣рдорд╛рд░реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ get_queryset() рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рдирд╣реАрдВ рд╣реИ, рдЬреЛ рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рдорд╛рдгрд┐рдд рд╣реИ (рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХреБрдЫ рд╡рд┐рдзрд┐рдпрд╛рдВ рд╣реИрдВ)ред

рдореИрдВ рдпрд╣рд╛рдВ drf_yasg рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдорд╛рдгреАрдХреГрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ (рд╢рд╛рдпрдж рдПрдХ drf-yasg рдореБрджреНрджрд╛ рд╣реЛрдЧрд╛)ред

рд╡рд╛рдкрд╕ рдЯреНрд░реЗрд╕ рдХрд░реЗрдВ:

../../../Vcs/django-rest-framework/rest_framework/views.py:480: in dispatch
    response = handler(request, *args, **kwargs)
.venv/lib/python3.6/site-packages/drf_yasg/views.py:85: in get
    schema = generator.get_schema(request, self.public)
.venv/lib/python3.6/site-packages/drf_yasg/generators.py:215: in get_schema
    paths, prefix = self.get_paths(endpoints, components, request, public)
.venv/lib/python3.6/site-packages/drf_yasg/generators.py:337: in get_paths
    operation = self.get_operation(view, path, prefix, method, components, request)
.venv/lib/python3.6/site-packages/drf_yasg/generators.py:379: in get_operation
    operation = view_inspector.get_operation(operation_keys)
.venv/lib/python3.6/site-packages/drf_yasg/inspectors/view.py:30: in get_operation
    query = self.get_query_parameters()
.venv/lib/python3.6/site-packages/drf_yasg/inspectors/view.py:293: in get_query_parameters
    natural_parameters = self.get_filter_parameters() + self.get_pagination_parameters()
.venv/lib/python3.6/site-packages/drf_yasg/inspectors/base.py:336: in get_filter_parameters
    fields += self.probe_inspectors(self.filter_inspectors, 'get_filter_parameters', filter_backend()) or []
.venv/lib/python3.6/site-packages/drf_yasg/inspectors/base.py:71: in probe_inspectors
    result = method(obj, **kwargs)
.venv/lib/python3.6/site-packages/drf_yasg/inspectors/query.py:27: in get_filter_parameters
    fields = filter_backend.get_schema_fields(self.view)
../../../Vcs/django-filter/django_filters/rest_framework/backends.py:131: in get_schema_fields
    "{} is not compatible with schema generation".format(view.__class__)
E   UserWarning: <class 'project.app.views.AffiliationViewSet'> is not compatible with schema generation

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рд╡реНрдпреВрд╕реЗрдЯ рдХреЗ get_queryset рддрд░реАрдХреЗ рдореЗрдВ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВред рдЙрд╕ рдорд╛рдорд▓реЗ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рдЬрд╣рд╛рдВ self.request рд╣реИ None рдЪрд╛рд▓ рдЪрд▓ рд░рд╣рд╛ рд╣реИред

def get_queryset(self):
    if self.request is None:
        return SomeModel.objects.none()

    return SomeModel.objects.filter(...)

рд╕рднреА 4 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рд╣рдо рдпрд╣рд╛рдВ рдмрд╣реБрдд рдХреБрдЫ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред get_queryset() рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдХреЛрдИ рднреА рд╡рд┐рдзрд┐ рдЗрд╕рдореЗрдВ рдЪрд▓рдиреЗ рд╡рд╛рд▓реА рд╣реИред рдЖрдкрдХреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рдЕрдЬреНрдЮрд╛рдд рдорд╛рдорд▓реЗ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдбреАрдЖрд░рдПрдл рдХреЗ рдЖрддреНрдордирд┐рд░реАрдХреНрд╖рдг рддрд░реНрдХ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред (рд▓реЗрдХрд┐рди рд╡рд╣рд╛рдВ рдЕрднреА рддрдХ рдХреЛрдИ рдЖрд╕рд╛рди рдЬрд╡рд╛рдм рдирд╣реАрдВ рд╣реИред)

рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рд╡реНрдпреВрд╕реЗрдЯ рдХреЗ get_queryset рддрд░реАрдХреЗ рдореЗрдВ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВред рдЙрд╕ рдорд╛рдорд▓реЗ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рдЬрд╣рд╛рдВ self.request рд╣реИ None рдЪрд╛рд▓ рдЪрд▓ рд░рд╣рд╛ рд╣реИред

def get_queryset(self):
    if self.request is None:
        return SomeModel.objects.none()

    return SomeModel.objects.filter(...)

рдзрдиреНрдпрд╡рд╛рдж @gunthercox рдЖрдкрдХреА рдЯрд┐рдкреНрдкрдгреА рдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореЗрд░реА рдорджрдж рдХреАред рдЗрд╕рдиреЗ рдореБрдЭреЗ рд╕рдорд╛рдзрд╛рди рдХреА рд░рд╛рд╣ рдкрд░ рд▓рд╛ рдЦрдбрд╝рд╛ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдЖрдЦрд┐рд░рдХрд╛рд░ рдореЗрд░реЗ рд▓рд┐рдП рдЬреЛ рдХрд╛рдо рдХрд┐рдпрд╛ рд╡рд╣ рдпрд╣ рдерд╛:

queryset = MyModel.objects.all()

def get_queryset(self):
    if not self.request:
        return MyModel.objects.none()

    if self.request.query_params:
        queryset = self.filter_queryset(self.queryset)
    else:
        queryset = self.queryset

    # ... the rest of the method code ...

    return queryset

рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рдФрд░ рдХреЛ рдЗрд╕реА рддрд░рд╣ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕реБрдЭрд╛рдпрд╛ рдЧрдпрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдпрд╣ рд╣реИ:

def get_queryset(self):
    if getattr(self, "swagger_fake_view", False):
        return MyModel.objects.none()

    # ... the rest of the method code ...

рдореИрдВрдиреЗ рдЗрд╕реЗ рдЗрд╕ рд╕реВрддреНрд░ рдореЗрдВ рджреЗрдЦрд╛ рд╣реИ: https://github.com/axnsan12/drf-yasg/issues/333

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

Alexx-G picture Alexx-G  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ses4j picture ses4j  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

hakib picture hakib  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

sassanh picture sassanh  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

edmorley picture edmorley  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ