我使用的是這樣的:Django的,ModelChoiceField()和初始值
field1 = forms.ModelChoiceField(queryset=...)
我怎樣才能讓我的形式顯示的值作爲選擇?
我使用的是這樣的:Django的,ModelChoiceField()和初始值
field1 = forms.ModelChoiceField(queryset=...)
我怎樣才能讓我的形式顯示的值作爲選擇?
如果您想要設置默認初始值,您應該像其他表單域一樣定義initial
,但您的set it to the id instead除外。
說你有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__
,所以這個disp放置正確。
你可以使用
field1 = forms.ModelChoiceField(queryset=..., initial=0)
做出選擇等,這是更通用的方法,然後對方回答的第一個值。
Django的這個版本是做什麼的?它在1.8版本中似乎不適用於我。 – BudgieInWA
我已經從[源代碼](https://github.com/django/django/blob/1.8.11/django/forms/models.py#L1127-L1130)驗證過,並且自己測試一下,這個工作正常對於'django> = 1.8'。我相信這應該適用於所有版本,包括'> = 1.4' – Yeo
的時候,他們已經改變:通過定義initial
像其他表單字段,除非你將其設置爲ID而不是
默認初始值現在可以設置。
現在這個就足夠了:
form = YourForm(initial = {'field1': instance_of_mymodel })
雖然雙方仍然有效。
請指定您現在運行的Django版本是否「時代已更改」。改變了一些可能會升級到1.2 ... – scoopseven
你可以這樣做,以及:如果你是通過解析查詢字符串或者通過Ajax調用沒有必要的情況下主鍵
form = YourForm(initial = {'field1': pk })
,查詢集已經處理,對於您的下降下來,PK索引狀態你想
代碼
form = YourForm(initial = {'field1': instance_of_mymodel.pk })
和
直接跟隨form = YourForm(initial = {'field1': instance_of_mymodel })
或初始場:
field1 = forms.ModelChoiceField(queryset=..., initial=0)
的所有工作。
前兩種方法將覆蓋最終的方式。
不知道在寫這篇文章時的版本是什麼,但這個問題現在已經過時了。在寫作時,在Django 1.5中,這兩種方法都可以工作。 – JcKelley
任何想法爲什麼我得到'__init __()有一個意外的關鍵字參數field1' – dashesy