Django - добавить CSS класс в SplitDateTimeWidget? - PullRequest
2 голосов
/ 19 июля 2011

Я использовал SplitDateTimeWidget, чтобы переопределить поле в форме модели. Есть ли способ назначить классы CSS отдельным полям, созданным этим?

widgets = {
              'my_field': SplitDateTimeWidget(),
                }

Любой совет приветствуется.

После того, как я попробовал твой код, Брэндон:

Если я попробую без передачи атрибутов, я получу: Объект NoneType не повторяется

для строки attrs_dict = dict (attrs).

Если я включу attrs, я получу: Объект 'tuple' не имеет атрибута 'copy'

в /usr/local/lib/python2.6/dist-packages/django/forms/widgets.py в init , строка 147

1 Ответ

8 голосов
/ 19 июля 2011

Да, вы можете передать attrs = {'class': 'your_class'}, но он будет применять класс как к DateInput, так и к TimeInput.

Если вам нужно добавить разные классы для обоих полей, вам, вероятно, потребуется расширить SplitDateTimeWidget, переопределить init.

class MySplitDateTimeWidget(SplitDateTimeWidget):
    def __init__(self, attrs=None, date_format=None, time_format=None):
        date_class = attrs.pop('date_class')
        time_class = attrs.pop('time_class')

        widgets = (DateInput(attrs={'class' : date_class}, format=date_format),
               TimeInput(attrs={'class' : time_class}, format=time_format))
        super(SplitDateTimeWidget, self).__init__(widgets, attrs)

#forms.py

class MyForm(forms.Form):
    test_field = forms.DateTimeField(widget=MySplitDateTimeWidget(attrs={'date_class' : 'foo', 'time_class' : 'bar'}))

Я протестировал это в Django 1.3, который будет выводить следующий html при использовании этого виджета в формах. DateTimeField с именем 'test_field':

<label for="id_test_field_0">Test field:</label>
<input id="id_test_field_0" class="foo" type="text" name="test_field_0">
<input id="id_test_field_1" class="bar" type="text" name="test_field_1">

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

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