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

如何从Model返回自定义JSON?多字段组合及ModelSerializer使用问询

当然能用ModelSerializer搞定!这在DRF开发里是挺常见的需求,我给你两种实用方案,你可以根据自己的场景选择:

方案一:用SerializerMethodField实现灵活定制

如果这个字段合并逻辑只需要在序列化时用,不想污染Model层,那这个方法最适合。

假设你的Model是这样的:

class Store(models.Model):
    opening_time = models.TimeField()
    closing_time = models.TimeField()
    # 其他业务字段...

对应的Serializer可以这么写:

from rest_framework import serializers
from .models import Store

class StoreSerializer(serializers.ModelSerializer):
    # 声明我们要输出的自定义字段
    opening_hours = serializers.SerializerMethodField()

    class Meta:
        model = Store
        # 明确列出要暴露的字段,包含自定义的opening_hours
        fields = ['opening_hours', 'name', 'address']  # 替换成你实际需要的字段

    def get_opening_hours(self, obj):
        # obj就是当前的Store实例,在这里写合并逻辑
        # 这里把时间转成字符串格式,你也可以按需求调整返回格式
        return [obj.opening_time.strftime('%H:%M'), obj.closing_time.strftime('%H:%M')]

这个get_<字段名>方法是DRF的约定,专门用来生成自定义字段的值,不管你是合并多个字段、做计算还是关联其他数据,都能在这里实现,灵活性拉满。

方案二:在Model里加属性,Serializer直接复用

如果这个合并后的字段在其他地方(比如视图、后台管理)也需要用到,那把逻辑放到Model里更合适,方便多处复用:

先修改你的Model:

class Store(models.Model):
    opening_time = models.TimeField()
    closing_time = models.TimeField()

    @property
    def opening_hours(self):
        # 把合并逻辑封装成Model的属性
        return [self.opening_time.strftime('%H:%M'), self.closing_time.strftime('%H:%M')]

然后Serializer就可以直接把这个属性当成普通字段来引用:

class StoreSerializer(serializers.ModelSerializer):
    class Meta:
        model = Store
        # 直接包含我们定义的opening_hours属性,加上其他需要的字段
        fields = ['opening_hours', 'name', 'address']

这种方式的好处是逻辑集中,不用在多个地方重复写相同的处理代码。

额外小技巧:隐藏不需要的原始字段

如果你的Model有很多字段,只想暴露部分,除了在fields里明确列出,还可以用exclude来排除不需要的字段(不过更推荐用fields明确指定,可读性更强):

class StoreSerializer(serializers.ModelSerializer):
    opening_hours = serializers.SerializerMethodField()

    class Meta:
        model = Store
        exclude = ['opening_time', 'closing_time']  # 排除原始的两个时间字段

这样返回的JSON就只会包含你需要的opening_hours和其他指定字段,完美符合你的需求~

内容的提问来源于stack exchange,提问作者epord

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:46:39