1

Djangoフォームビューを使用していますが、ユーザーごとにカスタムの選択肢を入力したいと思いますChoicefield

これどうやってするの?

多分get_initial関数を使用できますか?フィールドを上書きできますか?

4

1 に答える 1

1

ラベル テキスト、必須フィールドの追加、選択肢のリストのフィルタリングなど、フォームに関する特定のものを変更したい場合は、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
于 2013-03-01T16:27:12.347 に答える