Не могу ли я установить число с десятичной частью в "MinMoneyValidator()" и "MaxMoneyValidator()" в "MoneyField()" с помощью Django-money?
Я использую Django-money, затем я устанавливаю 0.00
и 999.99
на MinMoneyValidator()
и MaxMoneyValidator()
соответственно в MoneyField()
, как показано ниже:
# "models.py"
from django.db import models
from djmoney.models.fields import MoneyField
from djmoney.models.validators import MinMoneyValidator, MaxMoneyValidator
class Product(models.Model):
name = models.CharField(max_length=50)
price = MoneyField( # Here
max_digits=5, decimal_places=2, default=0, default_currency='USD',
validators=[ # Here # Here
MinMoneyValidator(0.00), MaxMoneyValidator(999.99),
]
)
Затем я попытался добавить продукт, как показано ниже:
Но, я получил ошибку ниже:
TypeError: объект 'float' не является подписываемым
Итак, я установил 0
и 999
в MinMoneyValidator()
и MaxMoneyValidator()
соответственно в MoneyField()
, как показано ниже, после чего ошибка была устранена:
# "models.py"
from django.db import models
from djmoney.models.fields import MoneyField
from djmoney.models.validators import MinMoneyValidator, MaxMoneyValidator
class Product(models.Model):
name = models.CharField(max_length=50)
price = MoneyField(
max_digits=5, decimal_places=2, default=0, default_currency='USD',
validators=[ # Here # Here
MinMoneyValidator(0), MaxMoneyValidator(999),
]
)
На самом деле, я могу установить 0.00
и 999.99
в MinValueValidator() и MaxValueValidator() соответственно в models.DecimalField() без каких-либо ошибок, как показано ниже:
# "models.py"
from django.db import models
from django.core.validators import MinValueValidator, MaxValueValidator
class Product(models.Model):
name = models.CharField(max_length=50)
price = models.DecimalField( # Here
max_digits=5, decimal_places=2, default=0,
validators=[ # Here # Here
MinValueValidator(0.00), MaxValueValidator(999.99)
],
)
Итак, не могу ли я установить число с десятичной частью в MinMoneyValidator()
и MaxMoneyValidator()
в MoneyField()
?
Для этого вы можете использовать Decimal
:
from decimal import Decimal
class Product(models.Model):
# ...
price = MoneyField(
max_digits=5, decimal_places=2, default=0, default_currency='USD',
validators=[ # Here # Here
MinMoneyValidator(Decimal(0)), MaxMoneyValidator(Decimal(999)),
]
)