Как ограничить значения в Django DecimalField? - PullRequest
1 голос
/ 25 июня 2011

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

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

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

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

Ответы [ 2 ]

4 голосов
/ 25 июня 2011
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)]

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

1 голос
/ 25 июня 2011

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

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...