Динамические формы в Джанго, организованные GAE - PullRequest
1 голос
/ 16 марта 2012

Я новичок в Django, GAE, и столкнулся с некоторыми проблемами, когда пытался создавать динамические формы с использованием Django. Идея состоит в том, что выбор, сделанный из одного раскрывающегося списка, определяет значение в другом поле.

Подробно, если пользователь

  1. выберите «A» в «Species», тогда значение в «body_weight» будет 178. Аналогично,
  2. если он выберет "B" в "Видах", значение в "body_weight" будет 1580, а
  3. если выбрать «С» в «Видах», то он может заполнить «body_weight»

Я прочитал несколько примеров и обнаружил некоторые функции, такие как «init, и super должен быть включен». Таким образом, я изменил свои коды, но он все еще не работал.

Мои проблемы:

  1. Какова правильная позиция для размещения " init " и "super"?
  2. Мне нужно здесь "self.field"?

Все предложения приветствуются!

Спасибо!

Вот код.

Species_CHOICES=(('178','A'),('1580','B'),('','C'))

class Inp(forms.Form):
    Species = forms.ChoiceField(label='Species', choices=Species_CHOICES, initial='A')

    #Here detect the choice made by the user
    def get_STB_choices(Species):
        if Species=='178':
            r= 178
        elif Species=='1580':
            r= 1580
        else:
            r= 4440
        return a

    #assign values to a new parameter based on user's choice 
    def __init__(self, *args, **kwargs):
        super(Inp, self).__init__(*args, **kwargs)    
    body_weight=forms.FloatField(required=True, label='Body weight', initial=get_STB_choices(Species))


#write out in HTML
class InputPage(webapp.RequestHandler):
    def get(self):
        html = str(Inp())
self.response.out.write(html)

1 Ответ

1 голос
/ 16 марта 2012

Вам потребуется запустить Javascript на странице для обновления доступных вариантов выбора.

Я реализовал это здесь одним способом. Каждый раз, когда вы делаете выбор, страница отправляет AJAX-запрос на получение новых полей формы, которые зависели от первоначального изменения.

https://github.com/dragonx/django-hier-ajax-form

После того, как я это сделал, я понял, что уже существует проект, который сделал то же самое, но наши реализации довольно разные:

https://github.com/digi604/django-smart-selects

Кстати, обычно, когда вы вызываете super (), вы используете его с именем текущего класса, поэтому я ожидал бы

super(Inp, self).__init__(*args, **kwargs)    
...