Вопрос по customization, django-forms, django – Учебник о том, как написать пользовательские поля формы в Django?

21

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

Ваш Ответ

3   ответа
32

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

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

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

Примечание: clean () отвечает за запуск to_python (), validate () и run_validators (). Если вы переопределите clean () и неВы не можете реализовать это, вывсе испортит. orokusaki
orokusaki прав, если вы переопределяете clean (), вы должны хотя бы назвать этосупер реализация сsuper(UpperCaseField, self).clean(value) André Staltz
Спасибо. Я думаю, что мне нужно написать собственный виджет, потому что мне нужно настроить рендеринг поля. Mert Nuhoglu
6

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

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

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

16

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

Ссылка на последний источник:github.com/django/django/blob/master/django/forms/fields.py Ben Regenspan

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