2011-01-25 22 views
15

Mam formularz w mojej forms.py, który wygląda tak:Wypełnianie formularza Django z danymi z bazy danych w widoku

from django import forms 

class ItemList(forms.Form): 
    item_list = forms.ChoiceField() 

I trzeba wypełnić item_list z niektórych danych z bazy danych. Kiedy generowane w HTML item_list powinno być coś takiego:

<select title="ItemList"> 
    <option value="1">Select Item 1</option> 
    <option value="2">Select Item 2</option> 
</select> 

Wartości opcji w moim select zmieni prawie za każdym razem od zmiennej w zapytaniu często zmieniają generując nowe wyniki.

Co muszę umieścić w pliku view.py, a także w moich plikach szablonów, aby zapełnić listę pozycji wartościami z bazy danych?

Odpowiedz

25

Spójrz na ten przykład w dokumentacji Django:

Zasadniczo, można użyć argumentu queryset słowa kluczowego obiektu pole, aby pobrać wiersze z bazy danych:

class BookForm(forms.Form): 
    authors = forms.ModelMultipleChoiceField(queryset=Author.objects.all()) 

Aktualizacja

Jeśli potrzebujesz dynamiczne pole wyboru modelu, można oddać swój identyfikator elementu w konstruktorze formularza i ustawić odpowiednio queryset:

class ItemForm(forms.Form): 

    # here we use a dummy `queryset`, because ModelChoiceField 
    # requires some queryset 
    item_field = forms.ModelChoiceField(queryset=Item.objects.none()) 

    def __init__(self, item_id): 
     super(ItemForm, self).__init__() 
     self.fields['item_field'].queryset = Item.objects.filter(id=item_id) 

PS: Nie przetestowałem tego kodu i nie jestem pewien co do twojej dokładnej konfiguracji, ale mam nadzieję, że główny pomysł zostanie wyświetlony.

Zasoby:

+0

Problemem jest to, że cała moja logika dzieje się w view.py nie w forms.py. Zestaw zapytań wygląda bardziej jak ten Items.objects.filter (item_id = id). Zmienna "id" jest generowana w pliku view.py. – avatar

+0

co się stanie, jeśli dodasz inny parametr do konstruktora bookform? – amcashcow

+0

@itgorilla: Zaktualizowano mój post. – miku

Powiązane problemy