首页 > 解决方案 > Django DRF 路由不是有效的正则表达式

问题描述

我想使用带有@action装饰器的 DRF 视图集,但是当我调用该端点时,我得到了错误:

django.core.exceptions.ImproperlyConfigured: 
"^\.(?P<format>[a-z0-9]+)/?\.(?P<format>[a-z0-9]+)/?$" is not a valid regular expression: 
redefinition of group name 'format' as group 2; was group 1 at position 32

这里是url.py

router = routers.DefaultRouter()
router.register(r"", GenreViewSet, basename="genre")
urlpatterns = router.urls

viewsets.py

class GenreViewSet(viewsets.ModelViewSet):

    permission_classes = [IsAuthenticated]
    pagination_class = None
    queryset = Genre.objects.all()

    def get_serializer_class(self):
        if self.action == "list":
            return GenreSerializer

    @action(detail=True, methods=["patch", "delete"], url_path="favourite")
    def make_genre_favourite(self, request, pk=None):
        genre = self.get_object()
        # Other code and responses here.

父 url 来自/api/genre/. 端点有效,list它返回所有类型,它是给出错误的操作。

任何帮助都非常感谢。我已经尝试过format_suffix_patterns,但如果您可能会问的话,没有运气。

标签: pythondjangodjango-rest-framework

解决方案


在对这个错误进行了更多研究后,发现它很常见,并且有很多原因可能导致它,主要是与 with format_suffix_patterns。在urls.py我的父母中

urlpatterns = [
   path("api/", ...),
   # more paths,
]
urlpatterns = format_suffix_patterns(urlpatterns)

对于遇到此问题的任何人,我的解决方法是删除urlpatterns = format_suffix_patterns(urlpatterns)行。


推荐阅读