Skip to content

Commit 2983251

Browse files
fix list views with parameters in last path segment not named "list" views (#917)
This fixes the auto generated operation keys and operation ID. For list views which have a parameter in their last path segment.
1 parent a746893 commit 2983251

File tree

4 files changed

+8
-8
lines changed

4 files changed

+8
-8
lines changed

src/drf_yasg/generators.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
from rest_framework.schemas.generators import EndpointEnumerator as _EndpointEnumerator
1111
from rest_framework.schemas.generators import endpoint_ordering, get_pk_name
1212
from rest_framework.schemas.openapi import SchemaGenerator
13-
from rest_framework.schemas.utils import get_pk_description, is_list_view
13+
from rest_framework.schemas.utils import get_pk_description
1414
from rest_framework.settings import api_settings
1515

1616
from . import openapi
@@ -22,7 +22,7 @@
2222
get_queryset_from_view,
2323
)
2424
from .openapi import ReferenceResolver, SwaggerDict
25-
from .utils import force_real_str, get_consumes, get_produces
25+
from .utils import force_real_str, get_consumes, get_produces, is_list_view
2626

2727
logger = logging.getLogger(__name__)
2828

src/drf_yasg/utils.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -315,18 +315,18 @@ def is_list_view(path, method, view):
315315
"""
316316
# for ViewSets, it could be the default 'list' action, or an @action(detail=False)
317317
action = getattr(view, "action", "")
318-
method = getattr(view, action, None) or method
319-
detail = getattr(method, "detail", None)
318+
detail = getattr(view, "detail", None)
320319
suffix = getattr(view, "suffix", None)
321320
if action in ("list", "create") or detail is False or suffix == "List":
322321
return True
323322

324323
if (
325324
action in ("retrieve", "update", "partial_update", "destroy")
325+
or method.lower() != "get"
326+
# a detail action is surely not a list route
326327
or detail is True
327328
or suffix == "Instance"
328329
):
329-
# a detail action is surely not a list route
330330
return False
331331

332332
if isinstance(view, ListModelMixin):

tests/reference.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -448,7 +448,7 @@ paths:
448448
parameters: []
449449
/snippets/views/{snippet_pk}/:
450450
get:
451-
operationId: snippetsViewsRead
451+
operationId: snippetsViewsList
452452
description: SnippetViewerList classdoc
453453
parameters:
454454
- name: page

tests/test_management.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,12 @@
1212
from drf_yasg.generators import OpenAPISchemaGenerator
1313

1414

15-
def test_reference_schema(call_generate_swagger, db, reference_schema):
15+
def test_reference_schema(call_generate_swagger, db, reference_schema, compare_schemas):
1616
output = call_generate_swagger(
1717
format="yaml", api_url="http://test.local:8002/", user="admin"
1818
)
1919
output_schema = yaml_sane_load(output)
20-
assert output_schema == reference_schema
20+
compare_schemas(output_schema, reference_schema)
2121

2222

2323
def test_non_public(call_generate_swagger, db):

0 commit comments

Comments
 (0)