【问题标题】:Django, view get list of dictionaries from requestDjango,查看从请求中获取字典列表
【发布时间】:2017-09-17 22:57:12
【问题描述】:

我有一个对我的 django 视图的 AJAX 请求调用(使用 JQuery)。它发送以查看此类数据:

{"cityId": 1, "products_with_priority": [{"id": 1, "priority": 1}, {"id": 2, "priority": 2}, {"id": 3, "priority": 3}, {"id": 4, "priority": 4}, {"id": 5, "priority": 5}]}

在我的 django 视图中,我试图像这样得到这个列表:

def my_view(request):
    city_id = request.POST.get('city_id')
    products_priorities = request.POST.getlist("products_with_priority")

其中city_id 返回1products_with_priority 返回空数组。

如何从请求中接收字典数组?

【问题讨论】:

  • 试试这个:request.POST.getlist("products_with_priority[]")
  • 如何通过 jQuery 发送数据,如 formdata
  • @SathishKumarVG 作为data

标签: jquery python django dictionary


【解决方案1】:

确保你的 dataType 是 json,然后对你的数组进行字符串化:

dataType: 'json',
data: {'cityId': 1, 'products_with_priority': JSON.stringify([{"id": 1, "priority": 1}, {"id": 2, "priority": 2}, {"id": 3, "priority": 3}, {"id": 4, "priority": 4}, {"id": 5, "priority": 5}])}

然后在您的 Django 视图中使用(标准 Python 库)jsonloads() 方法:

products_priorities = json.loads(request.POST.get('products_with_priority'))

【讨论】:

    【解决方案2】:

    将数据转换为json字符串。

    然后像接收一样接收它

    data = json.loads(request.POST)
    

    【讨论】:

      【解决方案3】:
      send your data in a json string to django view and then
      Try
      
      def my_view(request):
          data = OrderedDict()
          data = json.loads(request.POST)
          city_id = data['city_id']
      

      【讨论】:

        【解决方案4】:

        在 AJAX 请求中,确保包含标头:

        content-type: application/json
        

        如果你像我一样使用 Python 3,在 Django View 中:

        def my_view(request):
            received_json = json.loads(request.read().decode('utf-8'))
            products_priority = received_json['products_with_priority']
        

        【讨论】:

          【解决方案5】:

          如果您将POST 数据作为jQuery (raw) data 发送,那么您可以通过body 作为string 访问它。您可以从中将其加载为JSON。希望下面的例子对你有所帮助。

          def my_view(request):
              data = json.loads(request.body)
              city_id = data.get('cityId')
              products_priorities = data.get("products_with_priority")
          

          【讨论】:

          • request.body 无法通过 django Client() 类进行测试。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-03-23
          • 2021-10-17
          • 2011-11-08
          • 1970-01-01
          相关资源
          最近更新 更多