【问题标题】:Python/Django newbie attempting to combine two lists to a dictionaryPython/Django 新手试图将两个列表组合成一个字典
【发布时间】:2014-09-23 17:56:37
【问题描述】:

我是 完全 python 和 django 的新手,如果这似乎是一个愚蠢的问题,请原谅我。我有一种感觉,我并不真正了解我在处理什么,即使我知道我希望我的结果是什么样子。

我需要一个包含两组内容的字典,为简单起见,我只想说我下面的键对应于一个已经工作的查询 - 这些是字段名称。我想要发生的只是使用最终在名为 values 的列表中的数据预填充 Django ModelForm 以下。值的数据提取工作完美。我想要一个字典的唯一原因是因为这是 Django ModelForm 想要传递给它的,以便让用户更改或接受我的初始数据。我相信我被绊倒了,因为这是我第一次处理字典,尤其是在 django 下的 python 中。我已经使用 dict zip 技术进行了研究,它运行时没有错误,但所有内容最终都绑定到我称之为 name 的键上,该键当然来自数据库表的字段名称。

如果我放一个 import pdb ; pdb.set_trace 就在我的 return 语句之前并询问调试器我得到的数据是什么样的:

{'name': ['IB Report', 'IB Daily Report', 'Add description']}

有人可以让我走上正确的道路吗?

def mysql_ser_reports_mgmt(id):

    keys = ['name','subject','description']
    values = []

    for report in Report.objects.filter(id=id):
       values.append([str(report.name), str(report.subject), str(report.description)])

    data = dict(zip(keys,values))

    return data

【问题讨论】:

    标签: python django list dictionary django-forms


    【解决方案1】:

    Django 已经有一个过滤器方法可以满足您的需求。 Look into values()

    所以,你会这样做:

    return Report.objects.filter(id=id).values('name', 'subject', 'description')
    

    输出会是这样的:

    [{'name': 'name', 'subject': '<Subject>', 'description': '<Description>'},
     {'name': 'name2', 'subject': '<Subject2>', 'description': '<Description2>'},
    ]
    

    【讨论】:

    • 该建议绝对有帮助,但是我正在尝试解决值错误:字典更新序列元素 #0 的长度为 3; 2 是必需的——在您上面发布的退货声明中..
    • 当你使用 values 时你明白了吗?仅用这 1 行替换所有代码。它做同样的事情
    • 太棒了!我已经完成了上述操作。 return 语句是唯一剩下的东西。我现在在别的地方炸了……
    • ValueError at /ser_reports_mgmt/2 字典更新序列元素 #0 的长度为 3; 2 是必需的 请求方法:GET 请求 URL:127.0.0.1:8000/ser_reports_mgmt/2 Django 版本:1.3.1 异常类型:ValueError 异常值:字典更新序列元素#0 的长度为 3;需要 2 异常位置:init 中的 /usr/lib/python2.7/site-packages/django/forms/models.py,第 240 行
    • 这可能与表单只接受 2 个参数而不是 2..
    猜你喜欢
    • 2018-10-05
    • 1970-01-01
    • 1970-01-01
    • 2023-02-18
    • 2011-07-31
    • 1970-01-01
    • 1970-01-01
    • 2018-11-26
    • 2011-11-08
    相关资源
    最近更新 更多