Есть ли хорошие статьи, объясняющие пользовательские поля форм в django, а не в пользовательских полях модели? Я не смог найти никого через Google.
Учебник о том, как писать пользовательские поля форм в django?
Ответ 1
Поля формы легко настраиваются:
class UpperCaseField(forms.CharField):
def clean(self, value)
try:
return value.upper()
except:
raise ValidationError
в основном вы просто создаете класс, который наследует от поля, наиболее похожего на то, что вы хотите, затем перепишите метод clean(), чтобы он возвращал нужное значение. Вот еще один пример:
class MyObjectField(forms.ModelChoiceField):
# in this case, 'value' is a string representing
# the primary key of a MyObject
def clean(self, value):
try:
return MyObject.objects.get(pk=value)
except:
raise ValidationError
пользовательские виджеты, с другой стороны, немного полезнее, но немного сложнее сделать, потому что есть еще несколько методов, которые необходимо написать, чтобы они работали плавно.
Ответ 2
Как всегда с открытым кодом, вы узнаете многое, прочитав сам источник. См. Модуль django.forms.fields
, чтобы узнать, как все поля различных форм определены - большинство из них уже являются подклассами других, поэтому вы можете просто воспроизвести это и изменить то, что вам нужно.
Ответ 3
Это не учебник, но django docs немного об этом говорит:
Если встроенные классы Field не удовлетворить ваши потребности, вы можете легко создать пользовательские классы полей. Для этого просто создать подкласс django.forms.Field. Это только требования заключаются в том, что он реализует clean() и что его
__init__()
метод принимает основные аргументы упомянутых выше (требуется, ярлык, начальный, виджет, help_text).
Вы можете прочитать о чистом методе и посмотреть пример в django docs. Опять же, не учебник, а полезный.
Я нахожу, что многому учусь, читая код в некоторых доступных проектах приложений django, таких как django-extensions, которые переопределяют поля формы и являются хорошими инструментами обучения (для меня, по крайней мере). Это поможет вам начать работу.