【问题标题】:Can a Django view receive a list as parameter?Django 视图可以接收列表作为参数吗?
【发布时间】:2010-12-01 17:27:34
【问题描述】:

我想提交一个表单(通过 POST),该表单将提交 N 个(未知)用户 ID。 我可以让视图接收这些 id 作为列表吗?

例如

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']:

甚至可能吗?

我正在寻找最容易接受的方式。

【问题讨论】:

    标签: python django django-views


    【解决方案1】:

    你应该阅读QueryDict objects:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        如果您在一个页面中提交大量相同的表单,您可能会发现 Formsets 是您想要的。

        然后,您可以为用户 ID 创建一个表单,然后在 Formset 中重复它。然后,您可以遍历表单集以读取结果。

        【讨论】:

          【解决方案4】:

          您可以创建带有一些前缀的表单字段,以便稍后过滤。

          假设您使用名称为 uid-1、uid-2、... uid-n 的表单字段

          然后,当您处理 POST 时,您可以:

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

          这将为您提供 POST 中列表中以“uid”开头的字段的值。

          【讨论】:

          • 应该是 x[:3],而不是 x[:2]
          【解决方案5】:

          QueryDict 的getlist 就是您要查找的内容。

          来自文档:

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

          【讨论】:

            猜你喜欢
            • 2013-08-09
            • 2014-05-27
            • 2021-09-15
            • 2013-11-02
            • 2018-05-13
            • 1970-01-01
            • 2017-07-17
            • 1970-01-01
            • 2017-11-25
            相关资源
            最近更新 更多