У меня есть проект с двумя приложениями:Одинаковые названия модели в проекте Джанго
- счетов,
- классы.
В приложении учетных записей Я использую модель группы Django (для разрешений учетной записи) и в приложении классов. У меня есть еще одна модель с именем 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/",
(...)
}
Итак, обе цели совпадают с тем, что я не хочу. Страница администратора работает хорошо (я могу редактировать группу групп и классов группы).
Любые предложения?
Edit:
Изменение одной линии url.py как ниже (как это было предложено в одном из ответов ниже):
router.register(r"classes_groups", classes_views.GroupViewSet)
изменений/апи страница на:
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 обычно не является решением для этого случая.
Я думаю, что, называя модели с тем же именем не лучшая идея в любом случае. Для меня трудно предсказать, какие еще могут быть проблемы, но семантически это неправильный способ назвать объекты. –
Я согласен с тобой. Всякий раз, когда можно избежать конфликтов имен, я делаю это (то есть используя синонимы). Но в этом случае использование другого имени для Classes Group Group Group совершенно неинтуитивно. – tommus
Возможно, StudentGroup? –