Необходимо указать аргумент в сигнатуре метода, то есть изменить
def profile(request):
на:
def profile(request, username):
Вы также можете создать тип поля пользовательской модели - см. 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))
Но ,
Есть два способа сделать это. Один из них - использовать проверку формы, чтобы пользователь никогда не вводил число больше 50. Документы по проверке формы .
Если в процессе нет пользователя или вы не используете форму для ввода данных, вам придется отменить сохранение модели
], чтобы вызвать исключение или ограничить ввод данных в поле.