0

我有一个视图,它应该在提交时向一群用户发送电子邮件。

我正在使用表单输入电子邮件内容,然后根据 URL 的查询参数将电子邮件从数据库发送给用户。

我这样做是因为用户是在单独的页面上选择的。
所以 url 看起来像/sendmail/?users=18,21,32. 因为我使用的是表单,所以我的视图继承自FormView和我的电子邮件代码在form_valid.

问题是我似乎无法从该函数访问查询参数。 self.request.GET是空self.request.POST的,只有表单字段值。

我认为我应该使用的方法是向users表单 (type 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)

编辑: 更多的实验,如果我不隐藏users表单字段,它似乎可以工作。所以看起来初始数据没有填充到隐藏字段?

4

2 回答 2

0

使用此模式获取获取参数,它将处理不存在的参数。

/myview/?users=18,21,32

def myview(request):
    users = request.GET.get('users', None)
    if users:
        user_ids = users.split(',')

如果参数不存在,你一定是用错误的方式调用它

于 2013-04-10T10:40:26.670 回答
0

您可以尝试将request.REQUEST数据作为数据传递到表单中,而不是request.POST-REQUEST包括来自 POST 和 GET 的数据。

于 2013-04-10T10:41:36.107 回答