Учебник о том, как написать пользовательские поля формы в Django? - PullRequest
22 голосов
/ 06 октября 2009

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

Ответы [ 3 ]

32 голосов
/ 08 октября 2009

Поля формы легко настраиваются:

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

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

16 голосов
/ 06 октября 2009

Как всегда с открытым исходным кодом, вы многому научитесь, читая сам исходный код. См. Модуль django.forms.fields, чтобы увидеть, как определяются все различные поля формы - большинство из них уже являются подклассами других, так что вы можете просто скопировать это и изменить то, что вам нужно.

6 голосов
/ 06 октября 2009

Это не учебник, но в документации django об этом немного говорится:

Если встроенные классы поля не удовлетворить ваши потребности, вы можете легко создать Пользовательские поля классов. Для этого просто создать подкласс django.forms.Field. Это только требования заключаются в том, что он реализует метод clean () и его __init__() метод принимает основные аргументы упомянуто выше (обязательно, этикетка, начальный, виджет, help_text).

Вы можете прочитать о методе clean и посмотреть пример в django docs . Опять же не учебник, но полезный.

Я многому учусь, читая код в некоторых доступных проектах приложения django, таких как django-extensions , которые переопределяют поля формы и являются хорошими инструментами обучения (для я, по крайней мере). Это может помочь вам начать.

...