2011-05-12 80 views
1

我有這個簡單的形式與查詢集來顯示作業對象,並允許用戶選擇一個。現在,我想要有一組兩個單選按鈕,允許用戶選擇「過濾選項」。如果用戶用單選按鈕選擇一個組過濾器,我會下拉出現,允許他們選擇他們想要過濾的組。我想這樣做,而不必重新加載頁面,所以我試圖使用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> 

回答

1

您需要添加dajaxice功能選擇onchange以在模板中引用您的功能。

喜歡的東西:

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

(與你的項目名稱,your_app與你應用程序的名字替換your_project)。

還要確保您的模板中包含所有必要的標題(並且確實存在;例如,如果您查看可以單擊它們的源)。

一定要使用谷歌Chrome瀏覽器(Ctrl-Shift-I)或firebug(在Firefox中)進行調試。

編輯:我現在注意到你有類似的東西在你的窗體中。在查看源代碼時,它如何在HTML中呈現?它不正確地逃脫了嗎?

+0

啊哈哈!圍繞「選項」的單引號呈現爲「#39;」有關如何在forms.py中轉義它們的建議? – nnachefski 2011-05-12 20:23:33

+0

好吧,我通過使用mark_safe設置表單對象中的attrs來修復轉義問題。它現在呈現。但仍然沒有工作... :-( – nnachefski 2011-05-12 20:37:02

+0

@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

1

我覺得你在這裏忘了%號(value='#')和關閉</option>

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

+0

謝謝,我修復了選項渲染,這個代碼是從我看到的一個例子,我想它不適當。:-) – nnachefski 2011-05-12 20:26:59