我花了几个小时试图解决常见错误Could not resolve URL for hyperlinked relationship using view name "event-detail". You may have failed to include the related model in your API, or incorrectly configured the
lookup_field attribute on this field.
,并阅读了所有可能相关的问题。
我认为我的问题与提供API的路径有关,该路径包括url参数。我没有对我的API进行命名间隔。
应用urls.py
。
router = routers.DefaultRouter()
router.register("event", api_views.EventViewSet, base_name='event')
urlpatterns = [
path('', include('server.urls')),
path('admin/', admin.site.urls),
path('api/v1/eventID/<str:eventID>/', include(router.urls)),
path(r'api-auth/', include('rest_framework.urls'))
]
我使用url参数过滤视图中的结果:
视图集
class EventViewSet(viewsets.ModelViewSet):
serializer_class = EventSerializer
def get_queryset(self):
return Event.objects.filter(id=self.kwargs["eventID"])
我的序列化器非常基础:
from server.models import Event
class EventSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Event
fields = "__all__"
如果我更改路线以不包含网址参数,例如
path('api/v1/eventID/', include(router.urls)),
并更新查询集以简单地返回Event.objects.all()
,我的event
的超链接URL随响应一起返回,没有错误。
我尝试编辑序列化程序上的url
属性,该属性似乎可以控制尝试的reverse
,但我不知道在此处添加什么使其与我的路径匹配。