zoukankan      html  css  js  c++  java
  • 0023 DRF框架开发(10 把模型字典传到前端)

      模型字典主要是指在模型设计过程中对于每个字段的verbose_name和help_text

      verbose_name:标示字段显示的中文名

      help_text:标示字段帮助信息

      我们需要把这两个字段传到前端,让前端据此显示字段的中文名和帮助信息。让前端不必自己为字段命名,从而减少前端对业务的理解。也就是说:前端根据后端提供的数据显示就行了,不需要理解业务。

    1 增加模型字典

      考虑到多表关联,对已存在模型字典的,则在原有字典上增加,否则新建一个字典来增加。

    from django.apps import apps
    
    
    # 重新定义返回值,增加了每个字段的verbose_name和help_text
    def build_model_dict(app_name, model_name, redefined_data):
        field_objs = apps.get_model(app_name, model_name)._meta.fields
        # 考虑多表关联时需要取多个表的数据字典
        if not redefined_data.data.get('table_info', None):
            redefined_data.data['table_info'] = {}
        for i in range(len(field_objs)):
            redefined_data.data['table_info'][field_objs[i].name] = {
                'verbose_name': field_objs[i].verbose_name,
                'help_text': field_objs[i].help_text,
            }
        redefined_data.data.move_to_end('table_info', last=False)
        redefined_data.data.move_to_end('count', last=False)
        return redefined_data
    

    2 增加序列化器

    from rest_framework import serializers
    from nucleus.models import BookInfo
    
    
    class BookInfoSerializer(serializers.ModelSerializer):
        """
        图书序列化器
        """
    
        class Meta:
            model = BookInfo
            # 此处的顺序,控制前端的显示顺序
            fields = '__all__'
    

    3 增加视图

      特别要注意的是,DRF返回值是一个有序字典OrderedDict类型。

    from rest_framework.generics import GenericAPIView, mixins
    
    
    class BookInfoViewSet(GenericAPIView, mixins.ListModelMixin):
        """
        图书视图
        """
        queryset = BookInfo.objects.all()
        serializer_class = BookInfoSerializer
    
        def get(self, request):
            ret_data = build_model_dict('nucleus', 'PublisherInfo', self.list(request))
            ret_data = build_model_dict('nucleus', 'BookInfo', ret_data)
            return ret_data
    

      

      

  • 相关阅读:
    继承与组合关系
    sql decimal & float & celling 介绍
    EFDB 基本规范&知识
    html 5 video
    screen printing
    javascript array
    angular router ui bug !
    angular destroy & jquery destroy
    Google addword 策略
    规范 : angular ui router path & params
  • 原文地址:https://www.cnblogs.com/dorian/p/12446762.html
Copyright © 2011-2022 走看看