我有一个视图,它应该在提交时向一堆用户发送电子邮件。
我使用表单输入电子邮件内容,然后根据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 :(得分:0)
使用此模式获取获取参数,它将处理不存在的参数。
/myview/?users=18,21,32
def myview(request):
users = request.GET.get('users', None)
if users:
user_ids = users.split(',')
如果没有参数,你必须以错误的方式调用它
答案 1 :(得分:0)
您可以尝试将request.REQUEST
传递到表单中,而不是request.POST
- REQUEST
包含来自POST和GET的数据。