1

ModelFormいくつかのフィールドを として設定するクラスがありますChoiceFieldModelFormビューの 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ます。なぜでしょうか?

4

1 に答える 1