2009-09-26 24 views
1

我想提交一个表单(通过邮政),将提交N(未知)user_id的。 我可以让视图接收这些ID作为列表吗?django。一个视图可以接收一个列表作为参数吗?

例如

def getids(request,list): 

    for id in list: 
     usr = User.objects.get(pk=id); 
     //do something with it. 
     usr.save() 

for id in request.POST['id']: 

甚至可能吗?

我在寻找最好的接受方式。

回答

5

你应该阅读有关QueryDict objects

>>> q = QueryDict('a=1&a=2&a=3') 
>>> q.lists() 
[('a', ['1', '2', '3'])] 
+0

会做,谢谢 – Tom 2009-09-26 23:04:53

2

非常接近。 POST参数实际上包含在请求中的QueryDict object中。

def getids(request): 
    if request.method == 'POST': 
     for field in HttpRequest.POST: 
      // Logic here 
+0

谢谢!我会看看它。 – Tom 2009-09-26 23:05:54

2

如果您要提交大量的在一个页面相同的方式你可能会发现Formsets是你想要的东西。

然后,您可以为userid制作一个Form,然后在Formset中重复它。然后,您可以迭代该表单集以读取结果。

+0

是的,我认为这种做法,但作为一个新手,截止日期我拒绝了。将来可能会使用formset。谢谢 ! – Tom 2009-09-27 13:18:40

0

您可以使用某些可以稍后进行过滤的前缀创建表单域。

假设你使用表单域的名称,如UID-1,UID-2,... UID-N

然后,当你处理POST你可以这样做:

uids = [POST[x] for x in POST.keys() if x[:3] == 'uid'] 

那倒为您提供POST中以“uid”开头的字段的值。

+0

这应该是x [:3],而不是x [:2] – 2009-09-29 19:27:10

+0

yeap,对不起,我的坏 – 2009-09-29 22:28:58

0

QueryDictgetlist是你在找什么。

从文档:

>>> q = QueryDict('a=1', mutable=True) 
>>> q.update({'a': '2'}) 
>>> q.getlist('a') 
['1', '2'] 
相关问题