3

ユーザーが (静的リストから) nfl チームを選択できるようにする picks というモデルがあります。チームを選択すると、そのチームを再度選択することはできなくなるため、選択したチームによって選択の選択肢が減ります。
まだ選択されていないチームを把握するビューで呼び出す関数がありますが、この情報をフォームに渡す方法がわかりません。オンラインで多くのフォームの例を見てきましたが、これを達成する方法を示すものは実際には見つかりませんでした。私が読んだことから、forms.py ファイルからこの関数を呼び出す必要があるように見えますが、関数にはユーザー ID とリーグ ID をパラメーターとして渡す必要があるため、モデルでそれを行うだけです。誰か説明してくれませんか

私は Django と Python の両方で比較的新しいので、ここで行っている明らかな見落としを許してください。

ありがとう!

編集

わかりました、ここで問題について重要ではない情報を提供しすぎたのではないかと思います。ここで質問を単純化してみます。

フォームを作成するビューがあります。フォームには選択ボックスがあります。現在のユーザーと、ビューを起動した URL の変数に基づいて、ビュー内の選択ボックスに入れるオプションを計算します。選択オプションをフォームに渡す方法を知りたいのですが、そうでない場合は、これを達成する必要があります。

現時点で投稿するコードは手元にありませんが、問題とは関係ないと思います。私はそれを十分に一般的にしたことを願っています。

4

2 に答える 2

0

最初に動的フィールドなしでフォームを定義できます。ビューでそのインスタンスを作成した後、次のように入力して動的選択フィールドを追加できます

form_instance.fields['your_field'] = ChoiceField(choices=list_of_two_tuples)

またはModelChoiceFieldを利用して、次のように入力します

form_instance.fields['your_field'] = ModelChoiceField(queryset=Teams.filter(...))

または、こちらで説明されている同様の、しかしおそらくよりクリーンなメカニズムを使用することもできます。

于 2012-12-03T21:03:10.647 に答える
0

最も簡単な方法は、フォームのクエリ セットを変更することだと思います。意図は、不要なチームを除外することです (既に選択されているため)。

Teamと の間に関係があると仮定してUser、次のことを行います (あなたの見解で)

form.fields['team'].queryset = Teams.objects.exclude(selected_by_user = user.id)

一つ覚えておいてください:

Teams.objects.exclude(selected_by_user = user.id, date = datetime(2008, 12, 31))

ユーザーによって選択されておらず、かつ2008 年 12 月 31 日以降ではないチームに一致します。

Teams.objects.exclude(selected_by_user = user.id,).exclude(date = datetime(2008, 12, 31))

ユーザーがピックアップしていないチーム、または日付 31/12/2008 以降のチームに一致します。

参考文献: Django Querysets(除外フィルター)

于 2011-05-25T07:22:03.117 に答える