0

我有一个包含两个应用程序的项目:

  • 帐户,
  • 类。

在帐户应用程序中,我使用 Django 的 Group 模型(用于帐户权限),而在 classes 应用程序中,我有另一个名为 Group 的模型(但它应该被解释为一组学生)。

我的 url.py 看起来像:

(...)
from rest_framework import routers
from .accounts import views as accounts_views
from .classes import views as classes_views

router = routers.DefaultRouter()
(...)
router.register(r"groups", accounts_views.GroupViewSet)
router.register(r"classes/groups", classes_views.GroupViewSet)
(...)

但它没有按预期工作。/api 页面如下所示:

HTTP 200 OK
Allow: GET, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    (...)
    "groups": "http://127.0.0.1:8000/api/classes/groups/",
    "classes/groups": "http://127.0.0.1:8000/api/classes/groups/",
    (...)
}

因此,两者都针对相同的地址,这不是我想要的。管理页面运行良好(我可以编辑帐户的组和班级的组)。

有什么建议么?

编辑:

如下更改 url.py 的行之一(如以下答案之一所示):

router.register(r"classes_groups", classes_views.GroupViewSet)

将 /api 页面更改为:

HTTP 200 OK
Allow: GET, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    (...)
    "groups": "http://127.0.0.1:8000/api/classes_groups/",
    "classes/groups": "http://127.0.0.1:8000/api/classes_groups/",
    (...)
}

所以@argaen 解决方案通常不是这种情况的解决方案。

4

2 回答 2

1

url 的名称默认为小写的模型名称,在这种情况下'group'适用于两个视图集。因此,reverse无法区分并返回两者的第一个匹配项。

我相信将明确的基本名称传递给至少一个 url 应该可以解决它:

router = routers.DefaultRouter()
(...)
router.register(r"groups", accounts_views.GroupViewSet)
router.register(r"classes/groups", classes_views.GroupViewSet, "classes_group")
(...)
于 2015-03-15T00:42:34.010 回答
0

您不能在 rest_framework 路由器中添加带有斜线的路径。格式是这样的。还要检查这个问题,问同样的问题。

您可以使用链接问题中给出的解决方案,也可以像这样设置网址:

router.register(r"classes_groups", classes_views.GroupViewSet)
于 2015-03-14T17:28:35.253 回答