0

2 つのアプリを含むプロジェクトがあります。

  • アカウント、
  • クラス。

アカウント アプリでは 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の行の1つを変更します(以下の回答の1つで提案されているように):

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違いを見分けることができず、両方の最初の一致を返します。

少なくとも 1 つの 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 に答える