@@ -65,6 +65,12 @@ class ExtendedActionLinkRouterMixin(object):
65
65
_routs = routes [2 :4 ] + routes [:2 ] # first routes should be dynamic (because of urlpatterns position matters)
66
66
# left self.routs for backward
67
67
68
+ def route_is_in (self , target_route , route_list ):
69
+ for route in route_list :
70
+ if route .url == target_route .name and route .name == target_route .name and route .mapping == target_route .mapping and route .initkwargs == target_route .initkwargs :
71
+ return True
72
+ return False
73
+
68
74
def get_routes (self , viewset ):
69
75
"""
70
76
Augment `self.routes` with any dynamically generated routes.
@@ -80,20 +86,27 @@ def get_routes(self, viewset):
80
86
if self .is_dynamic_route (route ):
81
87
# Dynamic routes (@list_route or @detail_route decorator)
82
88
if self .is_list_dynamic_route (route ):
83
- ret + = self .get_dynamic_routes_instances (
89
+ temporary_route_list = self .get_dynamic_routes_instances (
84
90
viewset ,
85
91
route ,
86
92
self ._filter_by_list_dynamic_routes (dynamic_routes )
87
93
)
94
+ for temporary_route in temporary_route_list :
95
+ if not self .route_is_in (temporary_route , ret ):
96
+ ret .append (temporary_route )
88
97
else :
89
- ret + = self .get_dynamic_routes_instances (
98
+ temporary_route_list = self .get_dynamic_routes_instances (
90
99
viewset ,
91
100
route ,
92
101
self ._filter_by_detail_dynamic_routes (dynamic_routes )
93
102
)
103
+ for temporary_route in temporary_route_list :
104
+ if not self .route_is_in (temporary_route , ret ):
105
+ ret .append (temporary_route )
94
106
else :
95
107
# Standard route
96
- ret .append (route )
108
+ if route not in ret :
109
+ ret .append (route )
97
110
98
111
return ret
99
112
0 commit comments