Прежде всего, как указано в документах :
Виджетом формы по умолчанию для этого поля является NumberInput, когда localize равен False или TextInput в противном случае.
Когда вы спрашиваете о спиннерах в вашем виджете: это просто способ, которым ваши браузеры отображают NumberInput.
. Вы можете сделать их невидимыми, используя css.
Однако для NumberInput
чтобы принять любое десятичное значение, атрибут шага ввода должен быть установлен на «любой». Это то, что django обычно делает при создании виджета для FloatField
.
Но вы вручную устанавливаете атрибуты своего виджета, а вы не устанавливаете атрибут шага. Я полагаю, что значением по умолчанию, если не задано значение stap, является 1, что означает, что вы можете вводить только целые числа.
Я бы порекомендовал установить ваши атрибуты следующим образом, чтобы преодолеть эту проблему:
self.fields['weight'].widget.attrs.update({'placeholder':'Height','required':True})
Таким образом, вы не пропустите ничего важного django наборов по умолчанию.
Некоторая дополнительная информация:
widget.attrs
- это dict
с атрибутами django, используемыми для рендеринга виджет на странице html. Для некоторых виджетов django уже создает атрибуты при создании поля. Так что в вашем случае после вызова super().__init__(*args, **kwargs)
атрибуты виджета ввода с плавающей запятой это dict
: {'step': 'any'}
.
Теперь с вашей исходной строкой self.fields['weight'].widget.attrs={'placeholder':'Weight','required':True}
вы сбрасываете значение атрибута attrs на {'placeholder':'Weight','required':True}
, что означает, что у ваших атрибутов больше нет клавиши 'step'. Поведение по умолчанию NumberInput
без атрибута 'step' - принимать только целые числа.
Поэтому, когда вы обновляете attrs dict
(как показано выше) вместо его замены, вы убедитесь, что значения в dict
, который django уже установлен и который вы не хотите изменять, не затрагиваются, а атрибуты, которые вы хотите добавить / изменить, помещаются в существующий dict
.