Как ограничить максимальное значение числового поля в модели Django?

Необходимо указать аргумент в сигнатуре метода, то есть изменить

def profile(request):

на:

def profile(request, username):

144
задан sampablokuper 20 November 2010 в 12:14
поделиться

2 ответа

Вы также можете создать тип поля пользовательской модели - см. http://docs.djangoproject.com/en/dev/howto/custom-model-fields/#howto-custom -model-fields

В этом случае вы можете «унаследовать» от встроенного IntegerField и переопределить его логику проверки.

Чем больше я думаю об этом, тем понимаю, насколько это было бы полезно для многих приложений Django. Возможно, тип IntegerRangeField можно было бы отправить в качестве патча для разработчиков Django, чтобы рассмотреть возможность добавления в магистраль.

Это работает для меня:

from django.db import models

class IntegerRangeField(models.IntegerField):
    def __init__(self, verbose_name=None, name=None, min_value=None, max_value=None, **kwargs):
        self.min_value, self.max_value = min_value, max_value
        models.IntegerField.__init__(self, verbose_name, name, **kwargs)
    def formfield(self, **kwargs):
        defaults = {'min_value': self.min_value, 'max_value':self.max_value}
        defaults.update(kwargs)
        return super(IntegerRangeField, self).formfield(**defaults)

Затем в своем классе модели вы бы использовали его так (поле - это модуль, в котором вы помещаете приведенный выше код):

size = fields.IntegerRangeField(min_value=1, max_value=50)

ИЛИ для диапазона отрицательного и положительного (например, диапазон осциллятора):

size = fields.IntegerRangeField(min_value=-100, max_value=100)

Что было бы действительно круто, если бы его можно было вызвать с помощью оператора диапазона следующим образом:

size = fields.IntegerRangeField(range(1, 50))

Но ,

127
ответ дан 23 November 2019 в 22:50
поделиться

Есть два способа сделать это. Один из них - использовать проверку формы, чтобы пользователь никогда не вводил число больше 50. Документы по проверке формы .

Если в процессе нет пользователя или вы не используете форму для ввода данных, вам придется отменить сохранение модели ], чтобы вызвать исключение или ограничить ввод данных в поле.

10
ответ дан 23 November 2019 в 22:50
поделиться
Другие вопросы по тегам:

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