Как указано в этот ответ , Django 1.9 добавил атрибут Field.disabled:
отключенный булев аргумент, когда установлено на Правда, отключает поле формы с помощью отключенного HTML-атрибута так, чтобы это won’t быть доступным для редактирования пользователями. Даже если пользователь вмешается в значение field’s, отправленное серверу, оно будет проигнорировано в пользу значения от form’s исходных данных.
С Django 1.8 и ранее, чтобы отключить запись на виджете и предотвратить злонамеренные взломы POST необходимо вычистить вход в дополнение к установке эти readonly
атрибут на поле формы:
class ItemForm(ModelForm):
def __init__(self, *args, **kwargs):
super(ItemForm, self).__init__(*args, **kwargs)
instance = getattr(self, 'instance', None)
if instance and instance.pk:
self.fields['sku'].widget.attrs['readonly'] = True
def clean_sku(self):
instance = getattr(self, 'instance', None)
if instance and instance.pk:
return instance.sku
else:
return self.cleaned_data['sku']
Или, замените if instance and instance.pk
другим условием, указывающим, что Вы редактируете. Вы могли также установить атрибут disabled
на поле ввода, вместо readonly
.
Эти clean_sku
функция гарантирует, что эти readonly
значение не будет переопределено POST
.
Иначе, нет никакого встроенного поля формы Django, которое представит значение, в то время как отклонение связало входные данные. Если это - то, чего Вы требуете, необходимо вместо этого создать отдельное ModelForm
, который исключает недоступное для редактирования поле (поля), и просто распечатайте их в шаблоне.
Десятичное поле является правильным выбором для стоимость валюты.
Это будет выглядеть примерно так:
credit = models.DecimalField(max_digits=6, decimal_places=2)