Django == 2.2.6
djangorestframework == 3.10.3
Models.py
VAT_CHOICES = [(Decimal('0.00'), '0%'), (Decimal('6.00'), '6%'), (Decimal('12.00'), '12%'), (Decimal('25.00'), '25%')]
class Service(models.Model):
vat = models.DecimalField(verbose_name=_('vat'), decimal_places=2, max_digits=10, choices=VAT_CHOICES)
serializers.py
class ServiceSerializer(serializers.ModelSerializer):
vat = serializers.DecimalField(decimal_places=2, max_digits=10, coerce_to_string=True)
これを行うと、応答の付加価値税の値は期待どおりにsrtingになりますが、選択の検証はその場合を意味しません。
これで、vat = "5.00"を使用してサービスを作成できますが、モデルに選択リストがあるため、これは不可能です。
10進フィールドの付加価値税の文字列表現を取得しながら、選択肢の検証を維持するにはどうすればよいですか?
これはあなたを助けると思います
from rest_framework import serializers
from django.core.validators import DecimalValidator
class ServiceSerializer(serializers.ModelSerializer):
vat = serializers.ChoiceField(choices=[(Decimal('0.00'), '0%'), (Decimal('6.00'), '6%'), (Decimal('12.00'), '12%'),
(Decimal('25.00'), '25%')], validators=[DecimalValidator(max_digits=10, decimal_places=2)])
def to_representation(self, instance):
data = super(ServiceSerializer, self).to_representation(instance)
data.update(vat=str(instance.vat))
return data
選択肢は他の値を受け入れないため、max_digitsとdecimal_placesを検証する必要はないと思います。
choices=[(Decimal('0.00'), '0%'), (Decimal('6.00'), '6%'), (Decimal('12.00'), '12%'),('25.00'), '25%')
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加