używam coś takiego:Django ModelChoiceField(), a wartość początkowa
field1 = forms.ModelChoiceField(queryset=...)
Jak mogę uczynić moją postać pokazać wartość jako wybrany?
używam coś takiego:Django ModelChoiceField(), a wartość początkowa
field1 = forms.ModelChoiceField(queryset=...)
Jak mogę uczynić moją postać pokazać wartość jako wybrany?
Jeśli chcesz ustawić domyślną wartość początkową, powinieneś zdefiniować initial
podobnie jak inne pola formularza, z wyjątkiem ciebie set it to the id instead.
Say masz field1
tak:
class YourForm(forms.Form):
field1 = forms.ModelChoiceField(queryset = MyModel.objects.all())
wtedy trzeba ustawić początkowy podczas tworzenia formularza tak:
form = YourForm(initial = {'field1': instance_of_mymodel.pk })
zamiast:
form = YourForm(initial = {'field1': instance_of_mymodel })
Zakładam również, że zdefiniowałeś dla swoich modeli __unicode__
, więc ta dyspozycja prawidłowo się układa.
można po prostu użyć
field1 = forms.ModelChoiceField(queryset=..., initial=0)
aby pierwsza wartość wybranej itd. Jest to bardziej ogólny sposób, a następnie drugą odpowiedź.
W jakiej wersji Django to działa?Wydaje mi się, że nie działa to dla mnie w wersji 1.8. – BudgieInWA
Mam zweryfikowane z [kodu źródłowego] (https://github.com/django/django/blob/1.8.11/django/forms/models.py#L1127-L1130) i przetestuj go samodzielnie, że to działa dla 'django> = 1.8'. Wierzę, że powinno to działać we wszystkich wersjach, w tym '> = 1.4' – Yeo
Czasy uległy one zmianie:
Domyślna wartość początkowa może być ustawiony poprzez zdefiniowanie initial
jak innych pól formularza wyjątkiem ustawić go id zamiast.
Teraz będzie to wystarczyć:
form = YourForm(initial = {'field1': instance_of_mymodel })
Choć obie nadal działać.
Proszę określić, którą wersję Django używasz teraz, gdy" czasy się zmieniły ". Zmieniono niektóre z nich na upgrade do wersji 1.2 ... – scoopseven
Można to zrobić również:
form = YourForm(initial = {'field1': pk })
jeśli parsowania swój podstawowy klucz poprzez ciąg kwerendy lub za pośrednictwem wywołania AJAX bez potrzeby instancji, zbiór rekordów już obchodzić, że do spadku w dół, indeksy pk stan chcesz
Kod
form = YourForm(initial = {'field1': instance_of_mymodel.pk })
i
form = YourForm(initial = {'field1': instance_of_mymodel })
lub początkowe pole bezpośrednio następujący:
field1 = forms.ModelChoiceField(queryset=..., initial=0)
Wszystkie prace.
Pierwsze dwa sposoby zastąpią ostateczny sposób.
Nie wiem, jaka wersja była w momencie pisania tego tekstu, ale to pytanie jest teraz nieco przestarzałe. W Django 1.5, na piśmie, obie te metody zadziałają. – JcKelley
jakikolwiek pomysł, dlaczego dostaję '__init __() ma nieoczekiwany argument argumentu ze słowem kluczowym field1' – dashesy