Django - получение правильно отформатированных десятичных дробей в формах (+crispy)?

У меня следующая модель:

class Probe(models.Model):
    name = models.CharField("Probe name", max_length=200, blank=True, null=True)
    order = models.IntegerField("ordering", default=1)
    digits = models.IntegerField("trailing zeroes", null=True, blank=True, default=5)

class ProbeInst(models.Model):
    probe = models.ForeignKey(Probe, on_delete=models.CASCADE, null=True, verbose_name="probe")
    value = models.DecimalField("Value of probe", max_digits=10, decimal_places=5, null=True, blank=True)

Я пытаюсь отобразить форму ввода с помощью ModelForm и CrispyForms, которая будет отображать необходимое количество нулей в конце поля в соответствии с цифрами..

Однако когда я вижу фактическую форму - я получаю что-то вроде этого... enter image description here

В принципе, когда я ввожу "2" - я получаю "2.00000", но когда я ввожу "81.4" - я почему-то получаю "81,4"...

Я пробовал переопределить модель формы следующим образом

class ProbeEntryForm(ModelForm):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        if 'instance' in kwargs:
                step = 1 / 10 ** kwargs['instance'].probe.digits
                super(ProbeEntryForm, self).__init__(*args, **kwargs)
                self.fields['value'].decimal_places = kwargs['instance'].probe.digits
                self.fields['value'].widget = forms.NumberInput(
                    attrs={'min': 0, 'placeholder': "Значение", 'step': step, })
                self.fields['textvalue'].widget = forms.HiddenInput()

Но после сохранения формы у меня все еще отображаются значения в стиле float, например, "81,4"

Я хочу показать все значения с фиксированным количеством тралирующих нулей - например, "81.40000" и "2.00000

Может кто-нибудь рассказать подробнее?

OK, я нашел решение - добавление deciaml quantize и 'lang':'en' в атрибуты решило проблему!

class ProbeEntryForm(ModelForm):
# Переопределяем форму
def __init__(self, *args, **kwargs):
    super().__init__(*args, **kwargs)
    if 'instance' in kwargs:
        # Значение теста цифровое?
        if kwargs['instance'].probe.probeIsDigital:
            # Переопределяем количество десятых в полях ввода
            string = '0.' + '0' * kwargs['instance'].probe.digits
            step = 1 / 10 ** kwargs['instance'].probe.digits
            todigit = Decimal(10) ** -kwargs['instance'].probe.digits
            try:
                kwargs['instance'].value = (kwargs['instance'].value).quantize(todigit)
            except:
                print('Не введено значение цифрового теста')
            super(ProbeEntryForm, self).__init__(*args, **kwargs)
            self.fields['value'].decimal_places = kwargs['instance'].probe.digits
            self.fields['value'].widget = forms.NumberInput(
                attrs={'min': 0, 'placeholder': "Значение", 'step': step, 'lang':'en' })
            self.fields['textvalue'].widget = forms.HiddenInput()
        else:
            self.fields['value'].widget = forms.HiddenInput()
            self.fields['textvalue'].widget = forms.TextInput(attrs={'placeholder': "Текстовое значение"})
Вернуться на верх