DRF 的新手,只要我不在字段中包含“url”,一切都可以正常工作。这是我所拥有的:
序列化器:
class TaskSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Task
fields = ('pk', 'short_desc', 'scheduled_date')
Run Code Online (Sandbox Code Playgroud)
视图集:
class TaskViewSet(viewsets.ReadOnlyModelViewSet):
queryset = Task.objects.all().order_by('scheduled_date')
serializer_class = TaskSerializer
Run Code Online (Sandbox Code Playgroud)
网址:
router = routers.DefaultRouter()
router.register(r'tasks', views.TaskViewSet)
urlpatterns = [
[... bunch of non-REST URLs]
# REST API
url(r'^', include(router.urls)),
Run Code Online (Sandbox Code Playgroud)
在运行时,打印 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]+)/?$>
Run Code Online (Sandbox Code Playgroud)
无论 [...]/tasks/和[...]/tasks/123/工作,如果我键入他们到我的浏览器,这使我相信,任务列表和任务详细视图做,事实上是存在的。
现在我通过向序列化程序添加“url”来引入一个问题:
class TaskSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Task
fields = ('url', …Run Code Online (Sandbox Code Playgroud)