如何更改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) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |