2010-11-30 47 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,精心制作的第一部分...