Каково лучшее django образцовое поле для использования для представления суммы доллара США?

Как указано в этот ответ , 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, который исключает недоступное для редактирования поле (поля), и просто распечатайте их в шаблоне.

91
задан MikeN 16 July 2009 в 18:23
поделиться

1 ответ

Десятичное поле является правильным выбором для стоимость валюты.

Это будет выглядеть примерно так:

credit = models.DecimalField(max_digits=6, decimal_places=2)
141
ответ дан 24 November 2019 в 06:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: