送信時に多数のユーザーにメールを送信するビューがあります。
メールの内容を入力し、URL へのクエリ引数に基づいてデータベースからユーザーにメールを送信するためにフォームを使用しています。
ユーザーは別のページで選択されるため、このようにしています。
したがって、URL は次のようになり/sendmail/?users=18,21,32
ます。私はフォームを使用しているため、ビューは から継承されFormView
、電子メール コードは にありform_valid
ます。
問題は、その関数からクエリ引数にアクセスできないように見えることです。 self.request.GET
空でself.request.POST
、フォーム フィールドの値のみが含まれます。
私が使用すべきだと思う方法は、非表示users
フィールドをフォーム (タイプModelMultipleChoiceField
) に追加することです。これは、URL クエリから入力されます。
問題は、これを行う方法がわからないことです。私はこのように再実装しようとget_initial
しましたが、何もしないようでした:
def get_initial(self):
if 'users' in self.request.GET:
users = self.request.GET['users'].split(',')
return {'users': User.objects.filter(pk__in=users)}
これは正しいアプローチですか、それとももっと良い方法がありますか? アプローチが正しい場合、何が間違っているのでしょうか?
次の定義を使用してフィールドを非表示にしています。
users = forms.ModelMultipleChoiceField(queryset=User.objects.all(), widget=forms.MultipleHiddenInput(),
required=False)
EDIT: もう少し実験して、users
フォームフィールドを非表示にしないとうまくいくようです。初期データが非表示フィールドに入力されていないように見えますか?