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

如何获取Django moneyed货币列表并在React前端展示,解决序列化报错

问题原因

你遇到的报错是因为django-moneyed返回的CURRENCIES常量、list_all_currencies()函数的返回值都是Currency类的实例对象,Django默认的JSON序列化器无法直接序列化自定义类实例。

报错示例:

TypeError(f'Object of type {o.__class__.__name__} ')
TypeError: Object of type Currency is not JSON serializable
解决方案

方案1:普通Django视图场景

遍历Currency对象,仅提取前端需要的属性构造可序列化的字典列表即可,示例代码如下:

from moneyed import list_all_currencies
from django.http import JsonResponse

def get_currency_dropdown_options(request):
    currency_options = []
    for cur in list_all_currencies():
        # 可根据需求增删返回的字段,不需要symbol可以删除对应行
        currency_options.append({
            "value": cur.code,
            "label": f"{cur.code} - {cur.name}",
            "symbol": cur.symbol
        })
    return JsonResponse({"currency_options": currency_options})

方案2:Django REST Framework 接口场景

如果是在DRF序列化器中处理Currency字段,可通过自定义字段映射逻辑实现序列化:

from rest_framework import serializers
from .models import YourBusinessModel

class YourBusinessSerializer(serializers.ModelSerializer):
    # 显式映射Currency实例的属性到序列化字段
    currency_code = serializers.CharField(source="currency.code")
    currency_name = serializers.CharField(source="currency.name")
    
    class Meta:
        model = YourBusinessModel
        fields = ["id", "currency_code", "currency_name"]
注意事项
  • 不要直接将Currency实例放入返回的序列化数据中,必须显式提取对应的属性
  • 如果下拉菜单仅需要货币三位代码作为提交值,仅提取code属性即可满足需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 22:06:03