2013-04-10 96 views
0

我有一个视图,当它提交时,它应该向一大堆用户发送电子邮件。Django在POST中使用查询参数

我正在使用表单来输入电子邮件内容,然后根据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) 

编辑:多一点的实验,似乎如果我不躲users形式领域的工作。所以它似乎像初始数据不填充到隐藏的领域?

+0

如何从窗体中隐藏字段,可以显示窗体代码吗? – Igor 2013-04-10 12:38:18

+0

@Igor我已更新我的问题 – aquavitae 2013-04-10 16:01:26

回答

0

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

/myview/?users=18,21,32 

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

如果params为不存在,你必须调用了错误的方式

+0

参数在那里,但只在发布之前,他们似乎并没有填充到表单中。 – aquavitae 2013-04-10 10:43:30

0

你可以尝试通过request.REQUEST到形式的数据,而不是request.POST - REQUEST包括来自POST数据和GET 。