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

  

  

猜你喜欢

转载自www.cnblogs.com/dorian/p/12446762.html