4

モデルからデータを収集しているフォームがあります。問題は、モデル/ DBの情報を更新すると、サーバーが再起動されるまでフォームに表示されないことです。

forms.py

class RecordForm(forms.Form):
  name = forms.CharField(max_length=255)
  type_choices = []
  choices = Domain.objects.all()
  for choice in choices:
    type_choices.append( (choice.id, choice.name) )
  domain = forms.TypedChoiceField(choices=type_choices)
  type = forms.TypedChoiceField(choices=Record.type_choices)
  content = forms.CharField()
  ttl = forms.CharField()
  comment = forms.CharField()

ドメインモデルからデータを取得しています。ウェブサイトには、ドメイン情報を入力するページがあります。次に、ドロップボックスにそれらのドメインを一覧表示する別のページがあります。ただし、何かを追加または削除した場合、サーバーを再起動するまでドロップボックスに表示されません。私の推測では、djangoはフォームクラスを1回だけ呼び出します。変数を作成するときにクラスコードを再実行することを確認する方法はありますか?

4

2 に答える 2

6
class RecordForm(forms.Form):
    name = forms.CharField(max_length=255)
    domain = forms.TypedChoiceField(choices=[])
    type = forms.TypedChoiceField(choices=...)
    content = forms.CharField()
    ttl = forms.CharField()
    comment = forms.CharField()

    def __init__(self, *args, **kwargs):
        super(RecordForm, self).__init__(*args, **kwargs)
        self.fields['type'].choices = [(c.id, c.name) for c in Domain.objects.all()]
于 2013-03-13T20:18:29.670 に答える
3

モデルフォームのをオーバーライドして、Domainをインスタンス化するたびにオブジェクトを取得する必要があります。RecordForm__init__

class RecordForm(forms.Form):
    def __init__(self, *args, **kwargs):
        super(RecordForm, self).__init__(*args, **kwargs)
        self.type_choices = [(choice.id, choice.name,) for choice in \
            Domain.objects.all()]

    domain = forms.TypedChoiceField(choices=self.type_choices)
    ...
于 2013-03-13T20:15:30.963 に答える