Python Django 2.0 DecimalField "Убедитесь, что перед десятичной точкой не более 3 цифр" - PullRequest
0 голосов
/ 09 мая 2018

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

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

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

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

models.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) 

forms.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'}

1 Ответ

0 голосов
/ 09 мая 2018

Как вы говорите, 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.

...