首页 > 编程语言 >34.HyperLinkedModelSerializer详解

34.HyperLinkedModelSerializer详解

时间:2022-10-08 16:00:07浏览次数:60  
标签:info HyperLinkedModelSerializer url 34 field 详解 model class

  • HyperLinkedModelSerializer继承ModelSerializer,只是自动多出了一个url字段,其他都是一样的
  • 不同之处在于使用超链接来表示关联关系而不是主键
  • 默认情况下HyperLinkedModelSerializer序列化器包含一个url字段
  • url字段使用HyperlinkedIdentityField字段表示,模型的任何关联都使用该字段
 #源码
 
 class HyperlinkedModelSerializer(ModelSerializer):

    serializer_related_field = HyperlinkedRelatedField

    def get_default_field_names(self, declared_fields, model_info):
        # 覆盖重写了ModelSerializer中的方法
        # 只是在 第一个变量使用了url名字
        return (
            [self.url_field_name] +
            list(declared_fields) +
            list(model_info.fields) +
            list(model_info.forward_relations)
        )

    def build_nested_field(self, field_name, relation_info, nested_depth):
        # 覆盖重新ModelSerializer方法,嵌套的子类依然继承的是HyperLinkedModelSerializer
        class NestedSerializer(HyperlinkedModelSerializer):
            class Meta:
                model = relation_info.related_model
                depth = nested_depth - 1
                fields = '__all__'

        field_class = NestedSerializer
        field_kwargs = get_nested_relation_kwargs(relation_info)

        return field_class, field_kwargs
 
 #示例
 # 继承HyperlinkedModelSerializer
 class TextSerializer(HyperlinkedModelSerializer):
    auth = AuthSerializer()

    class Meta:
        model = Text
        # 设置url字段
        fields = ('url','id', 'title', 'content', 'auth', 'category', 'created')
  原来category的值是 对应的id 1和2,现在是对应的超链接,点击可以直接跳到对应分类   修改url字段名

'''
使用HyperLinkedModelSerializer生成的url,字段名默认是url
如果想要修改的话需求在setting中指定,比如我们要把url字段名改成to_link
''' 
REST_FRAMEWORK = {
    'URL_FIELD_NAME':'to_link'
}
 

标签:info,HyperLinkedModelSerializer,url,34,field,详解,model,class
From: https://www.cnblogs.com/Mickey-7/p/16769209.html

相关文章

  • 33.ModelSerializer详解
    ModelSerializer特点根据Model模型的定义,自动生成字段自动生成相应的验证器实现create和update自动默认将关系字段映射成PrimaryKeyRelatedField主键关系字段 Mod......
  • 【Python小工具】爬虫之使用OpenCV识别数字+字母验证码详解,告别收费
    Python小工具系列是一个使用Python实现各种各样有意思的小玩意儿的系列,包括制作个性化的二维化、词云、简单爬虫等,持续更新中,如果你感兴趣就关注一波吧!一、基本介绍......
  • Linux的free命令详解
    -k以KB为单位显示内存使用情况-m以MB为单位显示内存使用情况-g以GB为单位显示内存使用情况-o不显示缓冲区调节列-s<间隔秒数>持续观察内存使用状况......
  • GPIO点灯工程的详解
    GPIO点灯工程的实现1、时钟的选择BYPASSClockSource(旁路时钟源)指无需使用外部晶体时所需的芯片内部时钟驱动组件,直接从外界导入时钟信号。Crystal/CeramicResonat......
  • python内置模块decimal模块详解:提供十进制浮点运算支持;主要用来处理小数(四舍五入、精
    前言1、 decimal 模块提供十进制数据类型,并且存储为十进制数序列;2、 decimal 模块提供有界精度:用于存储数字的位数是固定的,可以通过 decimal.getcontext().prec=x ......
  • 140-《大数据架构师》Flink state状态详解_ev
          keyedstate是一个task维护多个state,operator是维护一个state           ......
  • comp9334辅导 proj2
    ​解析主要是第6部分。test*:mode.txt,para.txtinterarrival_.txtandservice_.txt输出为两个文件。mode*.txt:randomortrace个人感觉随机的模式更麻烦,所以先......
  • comp3411辅导assignment
    ​COMP3411/9814ArtificialIntelligenceTerm1,2022Assignment1–SearchandConstraintSolvingDue:Friday11March,10:00pmMarks:20%offinalassessment......
  • comp9334辅导 ass1
    ​COMP9334CapacityPlanningofComputerSystemsandNetworksAssignment(Version1.0),Term1,2022Due5:00pm,Fri18March2022(Week5)Changelogandvers......
  • P3402 可持久化并查集
    P3402通过主席树维护不同版本的并查集,注意要采用按秩合并的方式,路径压缩可能会爆。1#include<bits/stdc++.h>2usingnamespacestd;3constintN=3e5+10;......