为啥 django multivaluedict get 返回最后一个元素

Posted

技术标签:

【中文标题】为啥 django multivaluedict get 返回最后一个元素【英文标题】:why django multivaluedict get returns last element为什么 django multivaluedict get 返回最后一个元素 【发布时间】:2014-12-25 00:09:27 【问题描述】:

我已经多次使用 Django MultiValueDict 并且一直使用存储在一个键中的整个列表,或者我想使用列表中的第一个值。一个常见的用例是将其用作表单初始数据。

我的问题是默认情况下 Django MultiValueDict 的 get 方法返回最后一个元素。

我必须重写 MultiValueDict 的 getitem 还是有更好的选择?

【问题讨论】:

【参考方案1】:

你可以使用:

mv_dict.getlist()[index]

其中index 是列表中您想要的元素的索引。例如0 获取第一个元素。

查看https://github.com/django/django/blob/master/django/utils/datastructures.py#L285

但如果出于某种原因你总是想返回列表的第一个元素,那么子类化MultiValueDict 听起来很合理。这取决于您的用例。

【讨论】:

没错。但我再次必须处理 ListIndex 错误。其实我很好奇为什么最后一个元素而不是第一个元素?最后一个元素的常见用例是什么? 源代码中的答案:这个类的存在是为了解决 cgi.parse_qs 提出的恼人问题,它为每个键返回一个列表,即使大多数 Web 表单提交单个名称-值对。

以上是关于为啥 django multivaluedict get 返回最后一个元素的主要内容,如果未能解决你的问题,请参考以下文章

如何将文件从 Axios 上传到 Django?

将文件发送到 django 时出现 Keyerror/MultiValueDictKeyError

Django Rest Framework:无法序列化或保存上传的图像

为啥 django-rest-framework 不显示 OneToOneField 数据 - django

为啥 django-south 不包含在 django.contrib 中? [复制]

为啥Django无法正常运行?