Bas*_*ijk 4 python django django-urls django-rest-framework
我正在关注Django Rest Framework - Tutorial 3基于类的视图的教程.
如何将url字段(指向当前代码段)添加到序列化程序?
serializers.py
from rest_framework import serializers
from snippets.models import Snippet, LANGUAGE_CHOICES, STYLE_CHOICES
from django.core.urlresolvers import reverse
class SnippetSerializer(serializers.ModelSerializer):
class Meta:
model = Snippet
fields = ('id', 'title', 'code', 'linenos', 'language', 'style')
Run Code Online (Sandbox Code Playgroud)
urls.py
urlpatterns = [
url(r'^snippets/$', views.SnippetList.as_view()),
url(r'^snippets/(?P<pk>[0-9]+)/$', views.SnippetDetail.as_view()),
]
Run Code Online (Sandbox Code Playgroud)
实际输出
[
{
"id":1,
"title":"",
"code":"foo = \"bar\"\n",
"linenos":false,
"language":"python",
"style":"friendly"
}
]
Run Code Online (Sandbox Code Playgroud)
期望的输出
[
{
"id":1,
"url":"http://192.168.28.131:8000/snippets/1/",
"title":"",
"code":"foo = \"bar\"\n",
"linenos":false,
"language":"python",
"style":"friendly"
},
]
Run Code Online (Sandbox Code Playgroud)
你必须使用HyperlinkedModelSerializer序列化器和HyperlinkedIdentityField字段
的
HyperlinkedModelSerializer类相似,除了它使用超链接来表示的关系,而不是主键ModelSerializer类.url字段将使用HyperlinkedIdentityField序列化程序字段表示,并且模型上的任何关系将使用HyperlinkedRelatedField序列化程序字段表示 .
例如(与你的情况):
class SnippetSerializer(serializers.HyperlinkedModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='snippet-detail', read_only=True)
class Meta:
model = Snippet
fields = ('id', 'url', 'title', 'code', 'linenos', 'language', 'style')
Run Code Online (Sandbox Code Playgroud)
当然,view_namevalue必须与urls.py用于获取有关代码段的所有信息的(或其他地方)声明的url的名称相匹配.
例如:
# urls.py
urlpatterns = [
url(r'^snippets/(?P<pk>[0-9]+)$', views.SnippetDetail.as_view(), name='snippet-detail'),
]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4275 次 |
| 最近记录: |