0

<select>シンプルなhtmlリストを作成したい。

では、それぞれについて多数の詳細を持つモデルmodels.pyを定義します。詳細の 1 つは年、つまり 2000 年、2001 年などです。メンバー登録フォームで、20 年前の年を選択できるリストが必要です (年が経つにつれて動的に変化します)。MemberUser<select>

この投稿ModelChoiceFieldから、クエリセット引数を使用する必要があることを学びました。

動的リスト専用の別のモデルを作成する必要があるようですが、フォームがロードされるたびに計算できるため、データベースに存在する必要がないため、それは正しくないと思います。

では、queryset 属性には何を入力すればよいでしょうか。理想的には、現在の年を取得する単純な関数を作成して、クエリセットであるある種の配列を作成したいと考えています。私はPythonの経験があまりないので、これはばかげた質問かもしれません。

ダニエル・ローズマンへの返答:

はい、それははるかに理にかなっています。ありがとう!ただし、日時行を次のように変更する必要がありました。

import datetime
year = datetime.date.today().year
4

1 に答える 1

2

あなたはその質問に対する答え、またはその答えに対する私のコメントを誤解しています。選択肢がモデルから値を取得する必要がある場合にのみ、ModelChoiceField を使用します。私のコメントは、フォーム自体がモデルに基づいているかどうかに関係なく、それを行うことができることを指摘することだけでした。しかし、あなたの場合、選択はどのモデルとも関係がないため、ModelChoiceField は間違ったオプションです。

ここでは、標準の ChoiceField を使用します。

class MemberRegistrationForm(forms.ModelForm):
    year = forms.ChoiceField(choices=[])

    def __init__(self, *args, **kwargs):
        super(MemberRegistrationForm, self).__init__(*args, **kwargs)
        year = datetime.datetime.now().year
        self.fields['year'].choices = [(i, i) for i in range(year-20, year+1)]
于 2013-09-11T12:45:18.970 に答える