2016-10-17 3 views
0

ich eine Suchmaske habendjango URL-Parameter als Form Standardwert

class PostSearchForm(forms.Form): 
    keyword = forms.CharField(label=_('Search')) 
    def __init__(self,*args,**kwargs): 
     self.request = kwargs.pop('request', None) 
     super(PostSearchForm,self).__init__(*args,**kwargs) 
     raise Exception(self.request) # This returns none 
     categories = Category.objects.filter(status=True) 
     self.fields['categories'] = forms.ModelChoiceField(queryset=categories, widget=forms.SelectMultiple(attrs={'class': 'some-class'})) 

Jedes Mal, wenn Suche gemacht wird ich einen Build ein Formular mit Standardwert haben als das, was sie gesucht haben, so was habe ich versucht, ist die URL-Parameter erhalten in form init und setzen Sie den Wert, aber es war Rückgabe keine aufgrund eines Fehlers. Kann jemand mir sagen, wo ich falsch bin

Frage Aktualisiert

views.py

def get(self,request,category,*args,**kwargs): 
    search_form = PostSearchForm() 
    return render(request,self.template_name,{'search_form':search_form}) 

Vorlage

<form method="get" action="." id="searchForm"> 
{{ search_form.keyword }}  # When searched then the value should be searched term 
{{ search_form.categories }} 
</form> 

URL

http://example.com/?keyword=test 

In Form I Test als Wert

+0

Vielleicht sollten Sie zeigen, wo Sie das Formular verwenden. Übergeben Sie die Anfrage tatsächlich? (Obwohl ich nicht sehen kann, warum Sie es brauchen; Sie verwenden es nicht, und die Art zu tun, was Sie wollen, ist sowieso "Initial" übergeben.) –

+0

@DanielRoseman aktualisierte Frage bitte überprüfen – overflow

+0

Nun, ich kann nicht Verstehen Sie, wie Sie das erwarten. Du gibst eindeutig keine Anfrage an das Formular weiter, also wie soll es in diese Methode kommen? –

Antwort

0

Nichts zeigen müssen, kann in ein Objekt bekommen, wenn Sie es dort passieren. Wenn Sie die Anforderung in Ihrem Objekt wollen, es dann passieren:

search_form = PostSearchForm(request=request) 

Dies wird jedoch nicht bei allen in irgendeiner Weise helfen, und ich bin verwirrt darüber, warum haben Sie es tun würde. Wenn Sie die Anfangsdaten für Ihr Formular übergeben möchten, tun Sie Folgendes:

search_form = PostSearchForm(initial={'categories': categories, 'keyword': keyword})