You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 21:25:24