Djangoフォームビューを使用していますが、ユーザーごとにカスタムの選択肢を入力したいと思いますChoicefield
。
これどうやってするの?
多分get_initial
関数を使用できますか?フィールドを上書きできますか?
Djangoフォームビューを使用していますが、ユーザーごとにカスタムの選択肢を入力したいと思いますChoicefield
。
これどうやってするの?
多分get_initial
関数を使用できますか?フィールドを上書きできますか?
ラベル テキスト、必須フィールドの追加、選択肢のリストのフィルタリングなど、フォームに関する特定のものを変更したい場合は、ModelForm を使用するパターンに従い、オーバーライド コードを含むいくつかのユーティリティ メソッドをそれに追加します (これは整理整頓に役立ちます__init__
)。これらのメソッドは__init__
、デフォルトをオーバーライドするために呼び出されます。
class ProfileForm(forms.ModelForm):
class Meta:
model = Profile
fields = ('country', 'contact_phone', )
def __init__(self, *args, **kwargs):
super(ProfileForm, self).__init__(*args, **kwargs)
self.set_querysets()
self.set_labels()
self.set_required_values()
self.set_initial_values()
def set_querysets(self):
"""Filter ChoiceFields here."""
# only show active countries in the ‘country’ choices list
self.fields["country"].queryset = Country.objects.filter(active=True)
def set_labels(self):
"""Override field labels here."""
pass
def set_required_values(self):
"""Make specific fields mandatory here."""
pass
def set_initial_values(self):
"""Set initial field values here."""
pass
カスタマイズするのが だけの場合ChoiceField
は、これだけで十分です。
class ProfileForm(forms.ModelForm):
class Meta:
model = Profile
fields = ('country', 'contact_phone', )
def __init__(self, *args, **kwargs):
super(ProfileForm, self).__init__(*args, **kwargs)
# only show active countries in the ‘country’ choices list
self.fields["country"].queryset = Country.objects.filter(active=True)
次に、FormView にこのフォームを次のように使用させることができます。
class ProfileFormView(FormView):
template_name = "profile.html"
form_class = ProfileForm