2010-11-30 16 views
1

J'ai une question:
J'utilise sous forme django, et les champs comme MultipleChoiceField
dans view.py I données propres et obtenir GET URL comme cette
http://localhost:8000/?category=&style=&sex=&brand=ASICS&brand=Be+Positive&low_price=&high_price=
Donne-moi conseille, je peux regrouper le champ de marque et masquer vide.
Je veux obtenir quelque chose comme ceci:
http://localhost:8000/?brand=1+2GET URL à l'aide Décore formes

Et le reste une question:
Comment puis-je mettre en valeur vide (empty_label) pour

forms.ModelMultipleChoiceFIeld

forms.py:

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() ] 

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

première partie: je n'aime pas comment regarde mon URL – JIoJIaJIu

+0

deuxième: pour moi, il est important d'obtenir empty_label (ce n'est pas une étiquette en tant que label HTML) pour les formulaires.ModelMultipleChoiceFIeld – JIoJIaJIu

Répondre

0

Voici comment le navigateur envoie des données multiples. Cela fait partie de la spécification HTML, essayer de le changer serait folie et techniquement je ne comprends pas pourquoi vous essayez de vous soucier de l'apparence de vos données. Cela étant dit, si vous voulez changer la façon dont il est soumis, vous aurez besoin de javascript pour transformer les données sur le formulaire. Django n'a rien à voir avec ça.

En utilisant jQuery par exemple:

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

S'il vous plaît garder à l'esprit que vous ne recevrez pas d'analyse automatique des valeurs du côté Django. Normalement, il se transforme en une liste pour vous, mais maintenant vous êtes responsable de l'analyse de la «valeur + valeur + valeur» vous-même.

0

Pour étiquette vide dans les formes que vous pouvez le faire -

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

En gardant label comme « », vous obtenez l'étiquette vide. Les attrs sont essentiellement les attributs HTML du champ de texte du formulaire.

MISE À JOUR: Je ne comprenais pas la première partie de votre Q, élaborée ...