2012-08-13 7 views
10

Ich habe Probleme mit einem ChoiceField, um eine Dropdown-Liste von Werten in der Datenbank zu erstellen. Hier ist der Code-SnippetDjango ChoiceField von Datenbankwerten gefüllt

from django import forms 
from testplatform.models import ServiceOffering 

class ContactForm(forms.Form): 

    subject = forms.ChoiceField(queryset=ServiceOffering.objects.all()) 
    #subject = forms.ModelMultipleChoiceField(queryset=ServiceOffering.objects.all()) 

Die #subject .... Leitung funktioniert, aber wenn ich die Linie ChoiceField (queryset ....) Ich erhalte die folgende Fehlermeldung.

__init__() got an unexpected keyword argument 'queryset' 

Irgendwelche Ideen?

Antwort

24

ChoiceField hat kein Abfrage-Set. Sie suchen ModelChoiceField

+0

Excellent verarbeiten müssen -, die eine Behandlung gearbeitet. Ich bekomme ein ------ als einen Standardwert in der Dropdown-Box. Kann ich das ändern? Vielen Dank! – Oli

+1

Wenn dies so aussieht, wenn das Feld optional ist, setzen Sie das Feld im Formular auf 'required = True', um es zu entfernen. –

3

Verwenden Sie die ModelChoiceFieldLink Here

ChoiceField nicht queryset

+0

Ernsthaft? War es wirklich notwendig, meine Antwort mit einem Link und einer leichten Formatänderung zu wiederholen? –

+0

Entschuldigung, ich habe das Antwortfenster geöffnet und bin für diesen Link gegangen. Sobald ich zurückkomme, hast du es schon gepostet. Nochmals Entschuldigung. Ich weiß nicht, wie ich meine Antwort explizit löschen kann –

+0

danke - hab es .. Ich nehme an, ich kann den Anfangswert verwenden, damit ich nicht die ------ erscheinen? – Oli

5

unterstützt, wenn Sie Drop-Down-Liste aus der Datenbank füllen wollen, werde ich Ihnen empfehlen alle passieren die Werte in einem einzelnen Objekt von views.py zu Ihrer Vorlage. Sie können es auf diese Weise tun: 1] holen alle Werte aus Datenbank:

objectlist = ModelName.objects.all() 

, wenn Sie sortierte Liste in Dropdown-Liste wollen, tun dies:

objectlist = ModelName.objects.all().order_by('fieldname') 

wenn Sie distinctlist wollen, dies tun :

objectlist = ModelName.objects.distinct('fieldname') 

2] Führen Sie diese mit Vorlage dieser 'Objektliste' machen

return render(request, 'template.html', {'objectlist': objectlist}) 

3] Verwenden Sie in der Vorlage ein select-Tag und in user for loop, um über die Objektliste zu iterieren.

<select> 


{% for element in objectlist %} 


<option value={{ element.id }}>{{ element.name }} 



    </select> 

Wert in Option-Tag hängt davon ab, was Sie in Ihrem API

Verwandte Themen