динамические формы в django с ajax / dajax - PullRequest
1 голос
/ 12 мая 2011

У меня есть эта простая форма с набором запросов для отображения объектов задания и позволяет пользователю выбрать один. Теперь я хотел бы иметь группу из двух переключателей, которые позволили бы пользователю выбрать «параметр фильтрации». Если пользователь выбирает групповой фильтр с помощью переключателей, я бы появился раскрывающийся список, который позволяет им выбирать, по какой группе он хотел бы фильтровать. Я хочу сделать это без перезагрузки страницы, поэтому я пытаюсь использовать dajax.

Мне удалось найти пример на веб-сайте dajax, который делает что-то похожее, однако я не смог заставить его работать. Появятся переключатели и выпадающий список (пустой). Когда я нажимаю радиокнопку «Группа», раскрывающийся список должен заполняться всеми объектами моей группы, но это не так.

Я застрял на этом некоторое время, поэтому любая помощь будет принята с благодарностью.

forms.py

filters = (('0', 'Group'), 
           ('1', 'Host'), 
          )

class JobSelectForm(forms.Form):
    def __init__(self, *args, **kwargs):
        super(JobSelectForm, self).__init__(*args, **kwargs)
        self.fields['jobs'].widget.attrs["size"] = 20
    jobs = forms.ModelChoiceField(queryset=Job.objects.all().order_by('name'), empty_label=None,)
    filter = forms.ChoiceField(choices=filters,
                               widget=forms.RadioSelect(attrs={'onchange': "Dajaxice.tdportal.updatefilter(Dajax.process,{'option':this.value})", 'name':'combo1', 'id':'combo1', }, 
                                                        renderer=HorizRadioRenderer),

ajax.py

def updatefilter(request, option):
    dajax = Dajax()
    options = [Group.objects.all(),
               Host.objects.all(),
               ]
    out = ""
    for o in options[int(option)]:
        out = "%s<option value='#'>%s" % (out,o,)

    dajax.assign('#combo2','innerHTML',out)
    return dajax.json()

dajaxice_functions.register(updatefilter)

шаблон

    {{selectForm.filter.label}}: {{selectForm.filter}}
    <br>
    <select name="combo2" id="combo2" onchange="" size="1"></select>
    <br><br>
    <form method="post" action="/tdportal/jobs/">{% csrf_token %}
        {{selectForm.jobs}}
        <br><br>
        <input type="submit" value="Edit" />   <a href="/tdportal/jobs/new/"><input type="button" name="new" value="New" /></a>
    </form>

Ответы [ 2 ]

1 голос
/ 12 мая 2011

Я думаю, вы забыли знак % (value='#') и закрывающий </option> здесь:

out = "%s<option value='%s'>%s</option>" % (out,o,o)

1 голос
/ 12 мая 2011

Вам нужно добавить свою функцию dajaxice в select onchange для ссылки на вашу функцию в шаблоне.

Что-то вроде:

<select name="combo2" id="combo2" onchange="Dajaxice.your_project.your_appname.updatefilter(Dajax.process,{'option':this.value}" size="1"></select>

(Замените your_project именем вашего проекта,your_app с вашим именем приложения).

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

Обязательно выполните отладку с помощью инспектора Google Chrome (Ctrl-Shift-I) или Firebug (в Firefox).

РЕДАКТИРОВАТЬ: я заметил, что у вас есть что-то похожее, что в вашей форме.Как он отображается в HTML при просмотре исходного кода?Неправильно ли сбежал?

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