ModelForm
いくつかのフィールドを として設定するクラスがありますChoiceField
。ModelForm
ビューの 1 つで、データベース内のモデルのインスタンスから取得するクラスからフォームを作成したいと思います (そのように):
form = MyModel(instance=model_instance)
これを行ってテンプレートでフォームをレンダリングすると、ほとんどのフィールドに、モデル インスタンスから取得した値が事前に入力されていることに気付きました。ただし、これは 2 つのChoiceField
フィールドには当てはまりません。これらは、特定のオプションが選択されていないドロップダウン選択メニューとしてレンダリングされます。
奇妙なことに、ModelForm クラスでこれら 2 つのフィールドを -type として定義しないChoiceField
と、HTML では通常のテキスト入力フィールドとしてレンダリングされ、データベースの値を使用して事前入力されます。しかし、HTML で選択オプションの入力フィールドとして表示されるように定義すると、何も事前に選択されません。データベースからの値が事前に選択されるようにこれを変更できますか?
編集:ここで要求されたように、私のモデルとフォームのコードは次のとおりです:
class App(models.Model):
CODES = (
(u'a',u'annual'),
(u'm',u'monthly'),
(u'w',u'weekly')
)
code = models.CharField(max_length=1, choices=CODES)
start_time = models.TimeField(blank=True, null=True)
end_time = models.TimeField(blank=True, null=True)
class AppForm(ModelForm):
CODES = (
(u'',u'Please select code'),
(u'a',u'annual'),
(u'm',u'monthly'),
(u'w',u'weekly')
)
TIMES = (
(u'00:00',u'All Day'),
(u'12:00',u'Noon')
)
start_time = forms.ChoiceField(required=False, choices=TIMES)
end_time = forms.ChoiceField(required=False, choices=TIMES)
code = forms.ChoiceField(choices=CODES, label='Type')
class Meta:
model = App
興味深いことに、code
フィールドには、HTML としてレンダリングされたときに適切に事前選択されたモデル インスタンス値があります。choices
モデル定義に引数があると、ここで違いが生じるのだろうか?
更新:次のようApp
にインスタンスをプルアップすると、次のようになることに気付きました。python manage.py shell
a = App.objects.get(id=16)
a.start_time
のような値を取得しますdatetime.time(12, 0)
。しかし、Django admin では、App
すべてのインスタンスを見ると、すべてが と の(None)
下start_time
に表示されend_time
ます。なぜでしょうか?