加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

如何更改django rest框架中序列化程序中使用的DECIMAL_SEPARATOR

发布时间:2020-12-20 13:44:53 所属栏目:Python 来源:网络整理
导读:如何更改用于序列化DecimalField的DECIMAL_SEPARATOR和THOUSAND_SEPARATOR?或者我如何让 django-rest-framework根据l10n自动使用正确的? 我的情况: 我正在使用django rest框架ModelSerializer来序列化类似下面的模型: class House(models.Model): name =
如何更改用于序列化DecimalField的DECIMAL_SEPARATOR和THOUSAND_SEPARATOR?或者我如何让 django-rest-framework根据l10n自动使用正确的?

我的情况:

我正在使用django rest框架ModelSerializer来序列化类似下面的模型:

class House(models.Model):
    name = models.CharField(max_length=200)
    area = models.DecimalField(max_digits=7,decimal_places=2)

serializer.py代码如下:

class HouseSerializer(serializers.ModelSerializer):
    class Meta:
        model = House

在settings.py中,我已正确设置在模板中正常工作的本地化设置:

LANGUAGE_CODE = 'en-us'
USE_I18N = True
USE_L10N = True
LANGUAGES = (
    ('es',_('Spanish')),('en',_('English')),)

USE_THOUSAND_SEPARATOR = True

LOCALE_PATHS = (
    os.path.join(BASE_DIR,'locale'),)

我使用ModelViewSet:

class HouseViewSet(viewsets.ModelViewSet):
    serializer_class = serializers.HouseSerializer
    queryset = House.objects.all()

最后,我有urls.py与url中的i18n部分:

router = DefaultRouter()
router.register(r'house',viewsets.HouseViewSet)

urlpatterns += i18n_patterns('',url(r'^api/',include(router.urls)),url(r'^api-auth/',include('rest_framework.urls',namespace='rest_framework')),)

当我在example.com/en/api/house/中请求数据(GET)时,我得到正确格式化的十进制字段:

{
    "name": "House in L.A.","area": "1,234.50",}

但是,当我在example.com/es/api/house/中请求数据(GET)时,我得到的格式相同的十进制字段,这在西班牙语中是错误的.我需要得到:

{
    "name": "Casa en L.A.","area": "1.234,50",}

我该怎么做?谢谢!

解决方法

看起来DRF不支持号码本地化.在Django中,这有两种解决方式( more about this):

>在表单的字段中提供其他参数
>在模板中使用特殊标签或过滤器

它们都没有在DRF中使用.

但是django在django.utils.format中有帮助的功能 – number_format.您可以使用它来解决您的问题.

例如:

from django.utils.formats import number_format


class HouseSerializer(serializers.ModelSerializer):
    area = serializers.SerializerMethodField('area_localize')

    class Meta:
        model = House

    def area_localize(self,obj):
        return number_format(obj.area)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读