Не могу ли я установить число с десятичной частью в "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),
        ]
    )

Затем я попытался добавить продукт, как показано ниже:

enter image description here

Но, я получил ошибку ниже:

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)),
        ]
    )
Вернуться на верх