DRF - 序列化之生成資料鏈接 hypermedialink
阿新 • • 發佈:2021-01-19
資料庫結構和此文章相同:https://www.cnblogs.com/sch01ar/p/14295875.html
urls.py:
from django.urls import path, re_path from drf import views urlpatterns = [ path('userinfo/', views.UserInfoView.as_view()), re_path('group/(?P<group_pk>\d+)$', views.GroupView.as_view(), name='user_group'), ]
views.py:
from rest_framework.views import APIView from rest_framework import serializers from drf import models import json from django.shortcuts import HttpResponse class UserModelSerializers(serializers.ModelSerializer): # view_name 和 URL 的別名一致 # lookup_field="group_id" 是取 group 表下的 id 欄位生成 URL 中的 pk 值 # lookup_url_kwarg 為 URL 中的引數即 pk 的值 group = serializers.HyperlinkedIdentityField(view_name="user_group", lookup_field="group_id", lookup_url_kwarg="group_pk") class Meta: model = models.UserInfo # 顯示指定欄位 fields = ["id", "username", "password", "group"] # 指定層次為 0 depth = 0 class UserInfoView(APIView): def get(self, request, *args, **kwargs): users = models.UserInfo.objects.all() # context={'request': request} 是生成連結要加的引數 ser = UserModelSerializers(instance=users, many=True, context={'request': request}) ret = json.dumps(ser.data, ensure_ascii=False) return HttpResponse(ret) class GroupSerializer(serializers.ModelSerializer): class Meta: model = models.UserGroup fields = "__all__" class GroupView(APIView): def get(self, request, *args, **kwargs): # 獲取 URL 中的 group_pk 引數的值 pk = kwargs.get("group_pk") group_obj = models.UserGroup.objects.filter(pk=pk).first() ser = GroupSerializer(instance=group_obj, many=False) ret = json.dumps(ser.data, ensure_ascii=False) return HttpResponse(ret)
訪問:/userinfo/
訪問 /group/1