Django 项目中的相同模型名称
Same model names in Django's project
我有一个包含两个应用程序的项目:
- 帐户,
- 类.
在帐户应用程序中,我使用 Django 的组模型(用于帐户权限),在 类 应用程序中,我有另一个名为组的模型(但它应该被解释为一组学生)。
我的 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 解决方案通常不是这种情况的解决方案。
您不能在 rest_framework 路由器中添加带斜线的路径。格式是 this. Check also this question 要求相同。
您可以使用链接问题中给出的解决方案,也可以像这样设置 url:
router.register(r"classes_groups", classes_views.GroupViewSet)
url 的名称默认为小写的模型名称,在本例中,两个视图集都是 'group'
。因此,reverse
无法区分,returns 是两者的第一个匹配项。
我认为至少将一个显式基名传递给 url 之一应该可以修复它:
router = routers.DefaultRouter()
(...)
router.register(r"groups", accounts_views.GroupViewSet)
router.register(r"classes/groups", classes_views.GroupViewSet, "classes_group")
(...)
我有一个包含两个应用程序的项目:
- 帐户,
- 类.
在帐户应用程序中,我使用 Django 的组模型(用于帐户权限),在 类 应用程序中,我有另一个名为组的模型(但它应该被解释为一组学生)。
我的 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 解决方案通常不是这种情况的解决方案。
您不能在 rest_framework 路由器中添加带斜线的路径。格式是 this. Check also this question 要求相同。
您可以使用链接问题中给出的解决方案,也可以像这样设置 url:
router.register(r"classes_groups", classes_views.GroupViewSet)
url 的名称默认为小写的模型名称,在本例中,两个视图集都是 'group'
。因此,reverse
无法区分,returns 是两者的第一个匹配项。
我认为至少将一个显式基名传递给 url 之一应该可以修复它:
router = routers.DefaultRouter()
(...)
router.register(r"groups", accounts_views.GroupViewSet)
router.register(r"classes/groups", classes_views.GroupViewSet, "classes_group")
(...)