Aar*_*ier 4 python django rest django-rest-framework
是否有可能在Django Rest Framework 中在ModelViewSet 列表视图中的每条记录HyperLink
的id
字段上添加链接到该记录的详细信息视图?
该文件说,添加一个view_name
说法,但是这是有可能下这样做ModelViewSet
,因为看法实际上没有名字呢?
xle*_*eon 10
首先,所有ModelViewSet网址都有名称,即使您没有明确设置这些名称.
您可以在文档中找到如何在路由器中创建默认网址:http://www.django-rest-framework.org/api-guide/routers/(请参阅'SimpleRouter'网址名称表)
要查看应用程序中可用的所有实际URL名称,请尝试使用此实用程序:
def print_url_pattern_names(patterns):
"""Print a list of urlpattern and their names"""
for pat in patterns:
if pat.__class__.__name__ == 'RegexURLResolver': # load patterns from this RegexURLResolver
print_url_pattern_names(pat.url_patterns)
elif pat.__class__.__name__ == 'RegexURLPattern': # load name from this RegexURLPattern
if pat.name is not None:
print '[API-URL] {} \t\t\t-> {}'.format(pat.name, pat.regex.pattern)
Run Code Online (Sandbox Code Playgroud)
然后,在你的urls.py中:
urlpatterns = [
url(r'^', include(router.urls)),
]
if settings.DEBUG:
print_url_pattern_names(urlpatterns)
Run Code Online (Sandbox Code Playgroud)
如果您希望url与ModelViewSet的名称不同(如我的情况),您可以使用"base_name"在路由器上设置它:
router.register('contents', media_views.MediaViewSet, base_name='contents')
Run Code Online (Sandbox Code Playgroud)
接下来你需要的是扩展HyperlinkedModelSerializer:
from rest_framework import serializers
# in this sample my object is of type "Media"
class MediaSerializer(serializers.HyperlinkedModelSerializer):
#blablabla
Run Code Online (Sandbox Code Playgroud)
您将准备好序列化程序以显示指向详细信息视图的超链接,但还有一个必需步骤可供使用.这就是"view_name"的用武之地:
from rest_framework import serializers
class MediaSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Media
fields = ('url', ...[other fields you want to serialize])
extra_kwargs = {
'url': {'view_name': 'contents-detail'}
}
Run Code Online (Sandbox Code Playgroud)
这是样本的http响应(参见url字段):
归档时间: |
|
查看次数: |
3755 次 |
最近记录: |