Как ограничить значения в Django DecimalField?

У меня есть модель заказа с полем price. Я хотел бы, чтобы моя форма ограничивала это поле значениями от 0,0 до 1,0, но я не хочу, чтобы фактическая модель была ограничена как таковая.

В настоящее время мой код формы:

class OrderForm(ModelForm):
    class Meta:
        model = Order
        fields = ('stock', 'order', 'volume', 'price')

Выпадающий ввод был бы идеальным, но я понятия не имею, как это сделать с помощью форм Django.


person rouge8    schedule 24.06.2011    source источник


Ответы (2)


class OrderForm(ModelForm):
    price = forms.ChoiceField(choices=PRICE_CHOICES)

Где PRICE_CHOICES — кортеж кортежей в виде:

PRICE_CHOICES = (
    (value, display),
    (value, display),
    ...
)

На самом деле, поскольку вы имеете дело с линейной прогрессией, вы даже можете использовать некоторый синтаксический сахар:

price_choices = [('%.2f' % (x*0.1), '$%.2f' % (x*0.1)) for x in range(0,11)]

Единственная разница в том, что я поставил знак доллара перед отображаемым значением, но вы поняли.

person Chris Pratt    schedule 24.06.2011

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

Class OrderForm(forms.ModelForm):
   def __init__(*arg, **kwargs):
    super(OrderForm,self).__init__(*args, **kwargs)
    self.fields['price'].validators = [valid_price_range]


def valid_price_range(value):
    if value < 0 or value > 1:
       throw ValidationError(u'%s is not between 0 and 1' % value)
person arustgi    schedule 24.06.2011