2010-11-30 44 views
1

我有一些問題:
我使用Django的形式,領域,如MultipleChoiceField
在view.py我乾淨的數據,並獲取Get URL這樣
http://localhost:8000/?category=&style=&sex=&brand=ASICS&brand=Be+Positive&low_price=&high_price=
給我建議,我可以重新整理品牌領域並隱藏空洞。
我想要得到的東西是這樣的:對於forms.ModelMultipleChoiceFIeld裝飾GET URL中使用的形式

forms.py
如何設置空值(empty_label):

brand = forms.MultipleChoiceField(required=False, 
            widget=forms.SelectMultiple(attrs={'size':1}) 
           ) 
def __init__(self,app_label=None, *args, **kwargs):   
    super(Search, self).__init__(*args, **kwargs) 
    self.fields['brand'].choices = [('', 'All brands')]+[(brand.name, brand) for brand in Brand.objects.all() ] 

http://localhost:8000/?brand=1+2

而且別的一個問題

views.py:

if request.method == 'GET' and request.GET: 
    form = SearchForm(app_label, request.GET) 
    if form.is_valid(): 
     brands = form.cleaned_data['brand'] 
     kwargs.update({"brand__name__in": brands}) 
+0

第一部分:我不喜歡我的網址的外觀如何看待我的網址 – JIoJIaJIu 2010-11-30 13:53:12

回答

0

這是瀏覽器如何提交多個數據。它是HTML規範的一部分,試圖改變它將是愚蠢的和技術上的,我不明白爲什麼你會試圖關心你的url GET數據的外觀。這就是說,如果你想改變它提交的方式,你需要javascript來轉換表單提交的數據。 Django與這件事無關。

使用jQuery例如:

$('#form').submit(function(){ 
    //Get form data 
    //Transform into my custom set of vars 
    //Redirect to form's ACTION with my querystring appended. 
}); 

請記住,你不會得到在Django的側值的任何自動解析。通常它會將它變成一個列表,但現在你自己負責解析'值+值+值'。

0

對於空標籤中的形式,你可以做到這一點 -

class SomeForm(forms.Form): 
    h=forms.CharField(label=u'',widget=forms.TextInput(attrs={'value':'Search'})) 

通過保持label爲「」,你得到的標籤爲空。 attrs基本上是表單文本字段的HTML屬性。

更新:我不明白你的Q,精心製作的第一部分...