поля формы динамической переменной django - PullRequest
1 голос
/ 30 января 2012

Скажем, у меня есть два типа объектов, Apples и Chainsaws.Пользователю предоставляется форма, и в первом поле спрашивается, какой объект он хотел бы приобрести.Если они выбирают Apples, я бы хотел, чтобы одно поле формы выбора динамически отображалось с параметрами зеленый и красный и меткой цвет .С другой стороны, если они выберут Chainsaws, я бы хотел, чтобы два поля формы динамически появлялись, одно из них было CharField с меткой Ваше имя , а второе - IntegerField с меткой Ваш возраст (неплохо бы отследить, кто покупает ваши бензопилы).

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

Спасибо за любую помощь!-C

1 Ответ

2 голосов
/ 31 января 2012

Короткий ответ: для этого требуется сочетание форм CSS, javascript и django.

Форма

Шаг 1 - создание формы с условной проверкой для моего чистого метода.

from django import forms
from django.utils.translation import ugettext as _
from django.forms.widgets import RadioSelect, Textarea, CheckboxSelectMultiple
from django.utils.safestring import mark_safe

class FormContact(forms.Form):
    """
    The contact form
    """
    choice_a = forms.ChoiceField(
        label=_(u' '),
        choices=(
            (1, mark_safe(_(u'First Option'))),
            (0, mark_safe(_(u'Second Option'))),
        ),
        widget=RadioSelect,
        initial=1
    )
    show_if_choice_1 = forms.CharField(
        label=_(u'Choice 1 text box')
    )
    show_if_choice_2 = forms.CharField(
        label=_(u'Choice 2 text box')
    )

    def clean(self):
        super(forms.Form, self).clean()

        if 'choice_a' in self.cleaned_data :
            if self.cleaned_data['choice_a'] == '1':
                if self.cleaned_data['show_if_choice_1'] == '' :
                    self._errors['show_if_choice_1'] = self.error_class([_(u'Please Fill out choice 1 text box.'),])
            if self.cleaned_data['choice_a'] == '2':
                if self.cleaned_data['show_if_choice_2'] == '' :
                    self._errors['show_if_choice_2'] = self.error_class([_(u'Please fill out choice 2 box'),])

        return self.cleaned_data

JS и CSS

пишут некоторые JavaScript + CSS, чтобы показать скрытые поля на основе значения условного поля.

Примечание: если вам нужно больше указаний, просто скажите мне, я не хотел бы тратить вечность, набирая, если вы быстро получили указатель.

...