これをより一般的にする方法について、可能であればガイダンスが必要でした。
def get_industry_choices(self):
industries = Industry.objects.all().order_by('name')
ind_arr = [(ind.id, ind.name) for ind in industries]
return ind_arr
基本的に、この関数は。choices
に対して期待どおりに戻りforms.ChoiceField
ます。私はいくつかの場所でこれを行う必要があり、上記の関数をより一般的にしたいと思いました。をジェネリックにする方法は知っていますindustries = Industry.objects.all().order_by('name')
が、2番目の部分はよくわかりません。タプルを作成するときは、があり(ind.id, ind.name)
ます。ind.name
渡されたモデルに応じて、任意の値にすることができます(モデルに常に含まれているとは限りませんname
)。
私はこれを含むいくつかの場所でこれを読んでみました:
上記のリソースは、渡された関数を使用してそれを行う方法を示していますが、それは少しやり過ぎのようですか?とにかく関数を引数として渡す必要がある場合、もう1つの関数を使用して関数をより一般的にすることのポイントは何ですか?
[編集]
基本的に私はこれに似たものを作りたいです:
TITLE_CHOICES=(
(1, 'Mr.'),
(2, 'Ms.'),
(3, 'Mrs.'),
(4, 'Dr.'),
(5, 'Prof.'),
(6, 'Rev.'),
(7, 'Other'),
)
ですから、そうするとき、私は例えば可能な選択肢としてforms.ChoiceField
渡すことができます。TITLE_CHOICES
最初の値はフォームが送信されたときに取得する値であり、2番目の値はユーザーがフォームに表示する値です。これを任意のモデルでプログラムで作成できるようにしたいので、上記の例ではモデル名と1つのフィールドを渡しname
ます。のようにタプルを作成したい(id, name)
。しかしname
、別のモデルの何かと置き換えることができます...