DRF 新手,只要我不在字段中包含“url”,一切都会正常。这是我所得到的:
序列化器:
class TaskSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Task
fields = ('pk', 'short_desc', 'scheduled_date')
查看集:
class TaskViewSet(viewsets.ReadOnlyModelViewSet):
queryset = Task.objects.all().order_by('scheduled_date')
serializer_class = TaskSerializer
URLs:
router = routers.DefaultRouter()
router.register(r'tasks', views.TaskViewSet)
urlpatterns = [
[... bunch of non-REST URLs]
# REST API
url(r'^', include(router.urls)),
在运行时,打印 router.urls 给我:
<RegexURLPattern api-root ^$>
<RegexURLPattern api-root ^\.(?P<format>[a-z0-9]+)/?$>
<RegexURLPattern task-list ^tasks/$>
<RegexURLPattern task-list ^tasks\.(?P<format>[a-z0-9]+)/?$>
<RegexURLPattern task-detail ^tasks/(?P<pk>[^/.]+)/$>
<RegexURLPattern task-detail ^tasks/(?P<pk>[^/.]+)\.(?P<format>[a-z0-9]+)/?$>
Both [...]/tasks/
and [...]/tasks/123/
如果我将它们输入到浏览器中,它们就会起作用,这让我相信任务列表和任务详细信息视图确实存在。
现在我通过向序列化器添加“url”来引入一个问题:
class TaskSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Task
fields = ('url', 'pk', 'short_desc', 'scheduled_date')
将“url”添加到字段后,出现以下错误:
无法使用视图名称解析超链接关系的 URL
“任务细节”。您可能未能将相关模型包含在
您的 API,或者配置不正确lookup_field
属性上
这个领域。
DRF 文档说:
需要有一种方法来确定哪些视图应该用于
超链接到模型实例。默认情况下,超链接应
对应于与样式“{model_name}-detail”匹配的视图名称,
并通过 pk 关键字参数查找实例。
因为我已经验证了任务详细信息存在并且相应的 URL[...]/tasks/123/
有效,我一生都无法弄清楚为什么 DRF 无法形成 URL。有任何想法吗?