DRF中如何通过views_api调用模型方法,AJAX赋值表格数据?
解决方案
1. 处理get_cutoff_date_display字段
Django为choices字段自动生成的get_xxx_display()方法,默认不会被DRF序列化器包含,需要手动添加到序列化器中:
from rest_framework import serializers from .models import 你的模型类 class 你的模型序列化器(serializers.ModelSerializer): cutoff_date_display = serializers.CharField(source='get_cutoff_date_display', read_only=True) class Meta: model = 你的模型类 fields = ['cutoff_date', 'cutoff_date_display', ...] # 补充其他需要返回的字段
序列化后返回的数据会包含cutoff_date_display字段,AJAX即可获取该值。
2. 处理get_top_cje0.plan_v0和get_top_cje0.actual
分两种场景处理:
场景1:get_top_cje0是模型的自定义方法
如果get_top_cje0()是模型中返回某个对象的方法,使用SerializerMethodField提取目标属性:
class 你的模型序列化器(serializers.ModelSerializer): top_cje0_plan_v0 = serializers.SerializerMethodField() top_cje0_actual = serializers.SerializerMethodField() def get_top_cje0_plan_v0(self, obj): top_cje0_obj = obj.get_top_cje0() return top_cje0_obj.plan_v0 if top_cje0_obj else None def get_top_cje0_actual(self, obj): top_cje0_obj = obj.get_top_cje0() return top_cje0_obj.actual if top_cje0_obj else None class Meta: model = 你的模型类 fields = ['top_cje0_plan_v0', 'top_cje0_actual', ...]
场景2:get_top_cje0是模型的关联字段
如果get_top_cje0是ForeignKey/OneToOneField这类关联字段,使用嵌套序列化器处理:
class Cje0模型序列化器(serializers.ModelSerializer): class Meta: model = Cje0关联模型类 fields = ['plan_v0', 'actual'] class 你的模型序列化器(serializers.ModelSerializer): get_top_cje0 = Cje0模型序列化器(read_only=True) class Meta: model = 你的模型类 fields = ['get_top_cje0', ...]
返回数据中get_top_cje0会包含plan_v0和actual子字段,AJAX可通过response.data.get_top_cje0.plan_v0获取对应值。
3. 视图层确保返回序列化数据
在views_api.py中使用自定义序列化器处理数据:
from rest_framework.response import Response from rest_framework.views import APIView from .models import 你的模型类 from .serializers import 你的模型序列化器 class 你的API视图(APIView): def get(self, request): queryset = 你的模型类.objects.all() # 根据业务需求添加过滤条件 serializer = 你的模型序列化器(queryset, many=True) return Response(serializer.data)
内容的提问来源于stack exchange,提问作者SN Prasad
相关产品推荐
相关产品推荐

