模型字典主要是指在模型设计过程中对于每个字段的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
浙公网安备 33010602011771号