Я использую что-то вроде этого:
field1 = forms.ModelChoiceField(queryset=...)
Как я могу сделать свою форму показанным значением?
Я использую что-то вроде этого:
field1 = forms.ModelChoiceField(queryset=...)
Как я могу сделать свою форму показанным значением?
Если вы хотите установить начальное значение по умолчанию, вы должны определять initial
как другие поля формы, кроме вас установите вместо этого id.
Скажите, что у вас есть field1
:
class YourForm(forms.Form):
field1 = forms.ModelChoiceField(queryset = MyModel.objects.all() )
тогда вам нужно установить начальную, когда вы создадите форму следующим образом:
form = YourForm(initial = {'field1': instance_of_mymodel.pk })
а не:
form = YourForm(initial = {'field1': instance_of_mymodel })
Я также предполагаю, что вы определили __unicode__
для своих моделей, чтобы он отображался правильно.
Вы можете просто использовать
field1 = forms.ModelChoiceField(queryset=..., initial=0)
чтобы сделать первое значение выбранным и т.д. Это более общий способ, затем другой ответ.
Время, которое они изменили:
Теперь начальное значение по умолчанию можно установить, указав initial
, как и другие поля формы , за исключением того, что вместо него вы устанавливаете его вместо.
Теперь этого будет достаточно:
form = YourForm(initial = {'field1': instance_of_mymodel })
Хотя все еще работают.
Код
form = YourForm(initial = {'field1': instance_of_mymodel.pk })
и
form = YourForm(initial = {'field1': instance_of_mymodel })
или начальное поле непосредственно следующее:
field1 = forms.ModelChoiceField(queryset=..., initial=0)
Все работы.
Первые два способа переопределяют окончательный путь.
field1 = forms.ModelChoiceField(queryset=Model.objects.all(), empty_label="Selected value")
Это так просто...!
Вы также можете сделать это:
form = YourForm(initial = {'field1': pk })
если вы анализируете свой первичный ключ с помощью строки запроса или через вызов ajax, нет необходимости в экземпляре, набор запросов уже обработал это для вашего раскрывающегося списка, pk индексирует состояние, которое вы хотите