Подтвердить что ты не робот

Учебник о том, как писать пользовательские поля форм в django?

Есть ли хорошие статьи, объясняющие пользовательские поля форм в django, а не в пользовательских полях модели? Я не смог найти никого через Google.

4b9b3361

Ответ 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, которые переопределяют поля формы и являются хорошими инструментами обучения (для меня, по крайней мере). Это поможет вам начать работу.