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
    

      

      

  • 相关阅读:
    笔记44 Hibernate快速入门(一)
    tomcat 启用https协议
    笔记43 Spring Security简介
    笔记43 Spring Web Flow——订购披萨应用详解
    笔记42 Spring Web Flow——Demo(2)
    笔记41 Spring Web Flow——Demo
    Perfect Squares
    Factorial Trailing Zeroes
    Excel Sheet Column Title
    Excel Sheet Column Number
  • 原文地址:https://www.cnblogs.com/dorian/p/12446762.html
Copyright © 2011-2022 走看看