четверг, 19 июля 2012 г.

Звездочка в лейбле обязательных полей автоматически, доработал

Когда-то писал про решение от Farhan Ahmad (Adding * to required fields) для автоматической расстановки звездочек лейблах форм django у обязательных полей.

Оказалось, что данное решение расставляет эти звездочки везде в т.ч. и в админке django. И вот решил я это дело побороть. Получилось наверное по-колхозному, но все же:

def add_required_label_tag(original_function):
    """Adds the 'required' CSS class and an asterisks to required field labels."""
    decorated_forms = ["QuestionForm",]
    def required_label_tag(self, contents=None, attrs=None):
        form_name = self.form.__class__.__name__
        if form_name in decorated_forms:
            contents = contents or escape(self.label)
            if self.field.required:
                if not self.label.endswith('&nbsp;<span>*</span>'):
                    self.label += '&nbsp;<span>*</span>'
                    contents += '&nbsp;<span>*</span>'
    #            attrs = {'class': 'required'}
        return original_function(self, contents, attrs)
    return required_label_tag

def decorate_bound_field():
    from django.forms.forms import BoundField
    BoundField.label_tag = add_required_label_tag(BoundField.label_tag)

Итак, смысл в том, что я делаю список форм, где будем декорировать лейблы (decorated_forms). Список этот состоит из имен классов этих форм а далее в коде, я проверяю, есть ли текущий класс в моем списке или нет.

UPDATE:
Если вы используете django 1.6+, вам нужно обратить внимание на эти изменения!

Комментариев нет:

Отправить комментарий