gpt4 book ai didi

python - 将 django-rest-framework 中的超链接添加到 ModelViewSet

转载 作者:太空狗 更新时间:2023-10-30 01:54:03 25 4
gpt4 key购买 nike

在 Django Rest Framework 中是否可以在链接到的 ModelViewSet List View 中的每条记录的 id 字段上添加一个 HyperLink该记录的详细 View

documentation说要添加一个 view_name 参数,但这是否可以在 ModelViewSet 下进行,因为 View 实际上没有名称?

最佳答案

第一件事是所有 ModelViewSet url 都有名称,即使您没有明确设置这些名称也是如此。

您可以在文档中找到默认 url 是如何在路由器中创建的:http://www.django-rest-framework.org/api-guide/routers/ (参见“SimpleRouter”url 名称表)

要查看您的应用程序中可用的所有实际 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)

然后,在你的 urls.py 中:

urlpatterns = [
url(r'^', include(router.urls)),
]

if settings.DEBUG:
print_url_pattern_names(urlpatterns)

如果您希望 url 与您的 ModelViewSet 的名称不同(如我的情况),您可以在路由器上使用“base_name”设置它:

router.register('contents', media_views.MediaViewSet, base_name='contents')

接下来您需要扩展 HyperlinkedModelSerializer:

from rest_framework import serializers
# in this sample my object is of type "Media"
class MediaSerializer(serializers.HyperlinkedModelSerializer):
#blablabla

您将准备好一个序列化器来显示指向您的详细 View 的超链接,但还需要一个步骤才能使其工作。这就是“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'}
}
  1. “url”字段是显示链接的必填字段。
  2. 通过'extra_kwargs' > view_name,您告诉框架您的详细 View 的名称是'content-detail'。
  3. 'content-detail' 只是我的 View 名称。你需要找出你的(从上面的 url 名称实用程序)

这是示例的 http 响应(请参阅 url 字段):

enter image description here

关于python - 将 django-rest-framework 中的超链接添加到 ModelViewSet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32016973/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com