0

送信時に多数のユーザーにメールを送信するビューがあります。

メールの内容を入力し、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フォームフィールドを非表示にしないとうまくいくようです。初期データが非表示フィールドに入力されていないように見えますか?

4

2 に答える 2

0

POST と GET の両方からのデータを含めるのでrequest.REQUESTはなく、データとしてフォームに渡すことができます。request.POSTREQUEST

于 2013-04-10T10:41:36.107 に答える