DRF:具有URL参数的HyperlinkSerializer

时间:2018-07-28 23:16:44

标签: python django-rest-framework

我花了几个小时试图解决常见错误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,但我不知道在此处添加什么使其与我的路径匹配。

0 个答案:

没有答案