Oto deklaracja pola w formularzu:
max_number = forms.ChoiceField(widget = forms.Select(),
choices = ([('1','1'), ('2','2'),('3','3'), ]), initial='3', required = True,)
Chciałbym ustawić wartość początkową na be, 3
ale to nie działa. Bawiłem się parametrami, cudzysłowami / brakiem cudzysłowów itp ... ale bez zmian.
Czy ktoś mógłby udzielić mi ostatecznej odpowiedzi, jeśli jest to możliwe? I / lub niezbędne poprawki w moim fragmencie kodu?
Używam Django 1.0
django
django-models
django-forms
thebiglife
źródło
źródło
Odpowiedzi:
Spróbuj ustawić wartość początkową podczas tworzenia wystąpienia formularza:
źródło
'3'
odpowiada pierwszej wartości krotki czy drugiej?Nie dotyczy to bezpośredniego pytania, ale pytanie to pojawia się w przypadku wyszukiwań związanych z próbą przypisania wybranej wartości do
ChoiceField
.Jeśli wywołałeś już
super().__init__
swoją klasę Form, powinieneś zaktualizowaćform.initial
słownik, a niefield.initial
właściwość. Jeśli studiujeszform.initial
(np.print self.initial
Po wezwaniusuper().__init__
), będzie zawierał wartości dla wszystkich pól. PosiadanieNone
w tym dyktandzie wartości spowoduje nadpisaniefield.initial
wartości.na przykład
źródło
Możesz także wykonać następujące czynności. w twojej formie class def:
następnie wywołując formularz w swoim widoku, możesz dynamicznie ustawić zarówno początkowe wybory, jak i listę wyboru.
Uwaga: początkowe wartości muszą być listą, a wybory muszą być 2-krotkami, w moim przykładzie powyżej mam listę 2-krotek. Mam nadzieję że to pomoże.
źródło
initial
odnosi się do klucza wybranej pozycji, a nie do jej indeksu. Zajęło mi kilka prób, żeby to rozwiązać!Natknąłem się również na ten problem i zorientowałem się, że problem dotyczy przeglądarki. Po odświeżeniu przeglądarka ponownie wypełnia formularz tymi samymi wartościami, co poprzednio, ignorując zaznaczone pole. Jeśli wyświetlisz źródło, zobaczysz, że zaznaczona wartość jest poprawna. Lub umieść kursor w polu adresu URL przeglądarki i naciśnij Enter. Spowoduje to ponowne załadowanie formularza od zera.
źródło
Odpowiedzi Toma i Burtona w końcu działają dla mnie, ale miałem mały problem ze zrozumieniem, jak zastosować je do pliku
ModelChoiceField
.Jedyny trick jest to, że wybory są przechowywane jako krotek
(<model's ID>, <model's unicode repr>)
, więc jeśli chcesz, aby ustawić początkowy wybór modelu, mijamy modelu identyfikator jako wartości początkowej, a nie sam obiekt lub jego nazwę lub cokolwiek innego. Wtedy jest to tak proste, jak:Alternatywnie
initial
argument można zignorować zamiast dodatkowego wiersza za pomocą:źródło
GET
żądaniu i ustawić ją z poziomu widoku.Dave - czy masz szczęście w znalezieniu rozwiązania problemu z przeglądarką? Czy istnieje sposób na wymuszenie odświeżenia?
Jeśli chodzi o pierwotny problem, spróbuj wykonać następujące czynności podczas inicjowania formularza:
źródło
Instances should always modify self.fields; they should not modify self.base_fields.
Aby mieć pewność, muszę zobaczyć, jak renderujesz formularz. Wartość początkowa jest używana tylko w postaci niezwiązanej, jeśli jest powiązana, a wartość dla tego pola nie jest zawarta, nic nie zostanie wybrane.
źródło
Spróbuj, to działa dla mnie, dodałem to w models.py
źródło
TypeError at /my/url/ __init__() got an unexpected keyword argument 'default' Request Method: GET Request URL: http://localhost:8000/my/url/ Django Version: 1.8.1 Exception Type: TypeError Exception Value: __init__() got an unexpected keyword argument 'default'