Django serializer 方法补充之:depth 与字段生成超链接

前一节,我们学了serializer 的基本用法,在展示choice 或者有多层关联的外键的时候,我们需要自定义方法,但是Django 有默认的方法,只需要加一个变量即可。
Django serializer 方法补充之:depth 与字段生成超链接_第1张图片
depth 表示返回的深度,设置为几就表示有几层的关联外键信息,优点是书写简便,缺点是相应速度慢,不知道总共几层时,也不知道如何设置值,官方建议1-10,大多数是1-4即可。

2. 返回一个超链接

现在,通过group为例,我们为url 中添加一个动态参数,首先进行url 的正则设置

from django.urls import path, re_path
from api import views

urlpatterns = [
	path('user/', views.UserView.as_view()),
	path('userinfo/', views.UserInfo.as_view()),
	# 这个是我们这次进行测试的,pk 为参数,\d+ 表示数字出现一次到多次
	re_path('group/(?P\d+)', views.GroupView.as_view(), name='group')
]

以下是代码实例。
Django serializer 方法补充之:depth 与字段生成超链接_第2张图片
将返回的字段设置为超链接
Django serializer 方法补充之:depth 与字段生成超链接_第3张图片

下面是所有的代码


class UserInfoSerializer(serializers.ModelSerializer):
	# 这里的view_name 和路由里面的 name 相互对应,lookup_field 是根据关键字查找,后面的表示根据参数查找
	group = serializers.HyperlinkedIdentityField(view_name='group',
												 lookup_field='group_id', lookup_url_kwarg='pk')
	class Meta:
		model = models.UserInfo
		fields = ['id', 'username', 'password', 'group', 'roles']
		depth = 0



class UserInfo(APIView):
	def get(self, request, *args, **kwargs):
		users = models.UserInfo.objects.all()
		# 加了上面的超链接字段之后,要加上context 参数
		ser = UserInfoSerializer(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 种的参数
		pk = kwargs.get('pk')
		# 根据参数,在数据库中进行匹配值
		obj = models.UserGroup.objects.filter(id=pk).first()
		ser = GroupSerializer(instance=obj, many=False)
		ret = json.dumps(ser.data, ensure_ascii=False)
		return HttpResponse(ret)

你可能感兴趣的:(Django)