Python Django 2.0 DecimalField Убедитесь, что перед десятичной точкой не более 3 цифр.

Атрибуты столбца суммы установлены на max_digits = 13, decimal_places = 7, потому что технически у вас может быть что-то вроде 10000,0000001 биткойн.

Когда я пытаюсь ввести и отправить только 0,1 биткойна в своей форме, я получаю сообщение об ошибке:

Убедитесь, что перед запятой не более 3 цифр.

Это не работает так, как ожидалось: 0,1 — это не более 3 цифр, и даже если бы это было так, я все равно мог бы установить более 3 цифр. Что здесь происходит?

модели.py

class Transactions(models.Model):   
    user = models.ForeignKey(User, on_delete = models.CASCADE)  
    coin = models.CharField(max_length = 64)  
    buysell = models.CharField(default = 'buy', max_length = 4)
    amount = models.DecimalField(max_digits = 13, decimal_places = 7)  
    trade_price = models.DecimalField(max_digits = 5, decimal_places = 2)
    trade_date = models.DateTimeField(auto_now = True) 

формы.py

class TransactionForm(forms.ModelForm): 

    CHOICES = ((1, 'Buy'), (2, 'Sell'),)

    coin = forms.ModelChoiceField(queryset = Coin.objects.all()) 
    buysell = forms.ChoiceField(choices = CHOICES)

    field_order = ['buysell', 'coin', 'amount', 'trade_price']

    class Meta:
        model = Transactions
        fields = {'buysell', 'coin', 'amount', 'trade_price'}

person SkillSet12345    schedule 09.05.2018    source источник
comment
Попробуйте передать свой номер так: number = round(0.1, 7).   -  person Chiefir    schedule 09.05.2018
comment
Вы уверены, что серверная часть получает 0.1. Можете ли вы подтвердить, проверив данные запроса. Кажется, что-то еще отправляется   -  person Resley Rodrigues    schedule 09.05.2018


Ответы (1)


Как вы говорите, 0.1 не имеет более 3 цифр перед десятичной точкой, поэтому он не должен давать эту ошибку. Поэтому ошибка, вероятно, исходит из другого поля.

Вы не сказали, какое поле выдает ошибку или какие значения вы отправили для других полей, но я подозреваю, что проблема в вашем поле trade_price.

trade_price = models.DecimalField(max_digits = 5, decimal_places = 2)

В настоящее время это поддерживает максимальное значение 999.99. Поэтому, если вы введете trade_price=10000, вы получите ошибку no more than 3 digits.

person Alasdair    schedule 09.05.2018