Подтвердить что ты не робот

Django, ModelChoiceField() и начальное значение

Я использую что-то вроде этого:

field1 = forms.ModelChoiceField(queryset=...)

Как я могу сделать свою форму показанным значением?

4b9b3361

Ответ 1

Если вы хотите установить начальное значение по умолчанию, вы должны определять 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__ для своих моделей, чтобы он отображался правильно.

Ответ 2

Вы можете просто использовать

 field1 = forms.ModelChoiceField(queryset=..., initial=0) 

чтобы сделать первое значение выбранным и т.д. Это более общий способ, затем другой ответ.

Ответ 3

Время, которое они изменили:

Теперь начальное значение по умолчанию можно установить, указав initial, как и другие поля формы , за исключением того, что вместо него вы устанавливаете его вместо.

Теперь этого будет достаточно:

form = YourForm(initial = {'field1': instance_of_mymodel })

Хотя все еще работают.

Ответ 4

Код

form = YourForm(initial = {'field1': instance_of_mymodel.pk })

и

form = YourForm(initial = {'field1': instance_of_mymodel })

или начальное поле непосредственно следующее:

field1 = forms.ModelChoiceField(queryset=..., initial=0) 

Все работы.

Первые два способа переопределяют окончательный путь.

Ответ 5

field1 = forms.ModelChoiceField(queryset=Model.objects.all(), empty_label="Selected value")

Это так просто...!

Ответ 6

Вы также можете сделать это:

form = YourForm(initial = {'field1': pk })

если вы анализируете свой первичный ключ с помощью строки запроса или через вызов ajax, нет необходимости в экземпляре, набор запросов уже обработал это для вашего раскрывающегося списка, pk индексирует состояние, которое вы хотите