我有這個簡單的形式與查詢集來顯示作業對象,並允許用戶選擇一個。現在,我想要有一組兩個單選按鈕,允許用戶選擇「過濾選項」。如果用戶用單選按鈕選擇一個組過濾器,我會下拉出現,允許他們選擇他們想要過濾的組。我想這樣做,而不必重新加載頁面,所以我試圖使用dajax。Django的動態形式與AJAX/DAJAX
我在dajax網站上找到了一個類似的例子,但是我無法讓它工作。單選按鈕出現,下拉菜單出現(空白)。當我點擊「Group」單選按鈕時,下拉列表應該填充所有我的Group對象,但它沒有。
我一直堅持這一段時間,所以任何幫助將不勝感激。
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>
啊哈哈!圍繞「選項」的單引號呈現爲「#39;」有關如何在forms.py中轉義它們的建議? – nnachefski 2011-05-12 20:23:33
好吧,我通過使用mark_safe設置表單對象中的attrs來修復轉義問題。它現在呈現。但仍然沒有工作... :-( – nnachefski 2011-05-12 20:37:02
@nnachefski:你有HTML源代碼中的所有正確的標題嗎?'dajaxice.core.js','jquery.core.js','jquery - ???。min .js'(或任何你使用的庫)?你也可以嘗試在'onchange'中更改'Dajaxice.tdportal.updatefilter'到'Dajaxice.project_name.app_name.updatefilter'(用合適的名稱替換)?我一定要指定該項目和應用程序的名稱,讓它在我的系統上工作 – 2011-05-12 21:07:46