2011-12-20 81 views
0

我正在開發分面搜索系統。在搜索框下方,有一個具有選擇的無線電選擇控件:驗證後更改django表單字段的值

O New search  O Within your results 

當加載頁面時,新的搜索應該是默認選擇,所以我使用了initial關鍵字。

我遇到的問題是,用戶選擇New search併發出查詢後,我想將默認值切換爲Within your results,因爲大多數搜索都是細化的。

因此,我需要做的是更改用戶提交的值,該值存儲在Django Form中。

如何更改表單域的值?驗證已經發生,從我迄今收集的信息來看,request.GET是不可變的(可能是一件好事),我也無法更改Form

回答

0

只是一個想法,而不是黑客的用戶輸入,你可以顯示該字段只有當你有一個查詢參數的搜索。

這種方式第一次用戶'擊中'的看法,他沒有看到無用的無線電領域。

例如這裏我會在窗體的__init__期間使用搜索參數將字段設置爲隱藏的並且具有正確的初始值(您也可以執行DrTysa建議的操作,並在查看數據字典時移動搜索檢測)

searching = False 
if data.get('query'): 
    searching = True 
form = SearchForm(data, searching=searching) 
+0

這或多或少是我正在採取的路線。我忘記了單選按鈕最初不應顯示。雖然我沒有處理隱藏的表單 - 如果它是空白的,我可以暗示用戶想要一個新的搜索。 – mlissner 2011-12-20 20:55:14

0

Django的推薦方式修改request.GETcall the copy method.

mutable_get = request.GET.copy() 
mutable_get['search'] = 'within_results' 

你也可以在表單__init__或只是通過訪問綁定表單字段屬性設置初始動態。

form.fields['my_field'].initial = True 

哪一個工作將取決於你如何構建表單。

0
class MyForm(forms.Form): 
    def __init__(self, data, *args, **kwargs): 
     if 'do_search' in data: # or any other way to find out if there is an existing search 
      kwargs['initial'] = kwargs.setdefault('initial', {'your_radio': 'your_within_value'}) 
     super(MyForm, self).__init__(self, data, *args, **kwargs)