Django объяснение поиска URL HyperLinkedSerializer
Я относительно новичок в Django Rest Framework и только что потратил час на выяснение того, как класс HyperlinkedSerializer сопоставляет URL. К сожалению, это привело меня в большее замешательство. Я использую DRF вложенные маршрутизаторы и определение как для сериализаторов, так и для маршрутизаторов приведено ниже
# serializers.py
class RecordingFolderSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = RecordingFolder
fields = [...]
# urls.py
from rest_framework_nested import routers
from my_app import views
# ...
router = routers.DefaultRouter()
router.register(r'users', views.UserViewSet)
router.register(r'groups', views.GroupViewSet)
# Somehow fixes the error shown below:
router.register('folders', views.RecordingFolderViewSet) # WHY DOES THIS FIX MY ISSUE!
recording_router = routers.NestedSimpleRouter(router, r'users', lookup='user')
# Original version which caused the error before I added the folder view to the base router
recording_router.register('folders', views.RecordingFolderViewSet, basename='user-folders')
urlpatterns = [
path('admin/', admin.site.urls),
path(r'', include(router.urls)),
path(r'', include(recording_router.urls)),
path('api-auth/', include('rest_framework.urls', namespace='rest_framework')),
]
Отсутствие строки, которая прикрепляет папку к базовому маршрутизатору, приводит к такой ошибке, когда я пытаюсь перейти к users/id/folders/folder_id:
Could not resolve URL for hyperlinked relationship using view name "recordingfolder-detail". You may have failed to include the related model in your API, or incorrectly configured the `lookup_field` attribute on this field.
Мои вопросы двоякие: Во-первых, если у меня есть одно конкретное представление пользователей, например, users/id/profile, и я использую гиперссылки, как мне избежать проблемы, которая у меня была изначально, когда я получал ошибку ImproperlyConfigured? Во-вторых, почему добавление приведенной выше строки к общему маршрутизатору решило мою проблему? Я уже искал некоторую информацию по этому вопросу, но документация по этой теме не совсем понятна мне, а ответы здесь тоже не совсем относятся к моей проблеме