Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 结合django查询的字典键和值_Python_Django_Python 3.x_Dictionary_Key Value - Fatal编程技术网

Python 结合django查询的字典键和值

Python 结合django查询的字典键和值,python,django,python-3.x,dictionary,key-value,Python,Django,Python 3.x,Dictionary,Key Value,我有一个非常复杂的例子,我无法解决django中的相关字典函数 这是我通过html post消息检索的数据输出。添加消息(request,messages.INFO,data)功能: {'id_370': '370', '350_370': 'try_1', '450_370': 'try_2', 'id_397': '397', '350_397': 'try_3', '450_397': 'try_4'} try-1 try-2 try-3 try-4是我希望在数据库中更新的输入 基本上,

我有一个非常复杂的例子,我无法解决django中的相关字典函数

这是我通过html post消息检索的数据输出。添加消息(request,messages.INFO,data)功能:

{'id_370': '370', '350_370': 'try_1', '450_370': 'try_2', 'id_397': '397', '350_397': 'try_3', '450_397': 'try_4'}
try-1 try-2 try-3 try-4是我希望在数据库中更新的输入

基本上,我想做的是查找id_uu并使用以下命令过滤该对象
qs=FP.objects.filter(id=I.lstrip('id_uu')
,直到这里(循环的第一个)它工作正常

我不能做的是另一个for“for x in val”循环,我检查像_370和_397这样的键末尾的id,如果它符合该键,我想检索它的值,如果它的长度超过1,则更新我的数据库

我从两周开始就在努力,读了很多文件,但我的技能不足以解决问题,但我认为我走的是正确的道路,不是吗?如果有人能启发我,我会非常高兴的。:)

下面是我的view.py,在这里我遇到了逻辑问题

 else:
        if request.method == 'POST':
            data = request.POST.dict()
            data.pop('csrfmiddlewaretoken', None)
            ids = [k for k in data.keys() if 'id_' in k]
            messages.add_message(request, messages.INFO, data)
            for i in ids:
                val = [b for b in data.keys() if '_' + i in b]
                #messages.add_message(request, messages.INFO, val)
                #messages.add_message(request, messages.INFO, i.lstrip('id_'))
                qs = FP.objects.filter(id=i.lstrip('id_'))
                for x in val:
                    updates = {}
                    if len(data.values[x]) > 1 and '350_' in data.keys():
                        updates['P_350'] = data.values[x]
                    if len(data.values[x]) > 1 and '450_' in data.keys():
                        updates['P_450'] = data.values[x]
                    if updates:
                        qs.update(**updates)
        return render(request,"index.html")

如果我理解正确,dict包含两个id,然后是与这些id相关的一些值,格式为

  • id
    =事物id
  • \u
    =与对象相关的值
大概是

data = {'id_370': '370', '350_370': 'try_1', '450_370': 'try_2', 'id_397': '397', '350_397': 'try_3', '450_397': 'try_4'}
ids = {k.split('_')[1] for k in data if k.startswith('id_')}

groups = {}
for id in ids:
    groups[id] = {
        k.split('_')[0]: v
        for (k, v)
        in data.items()
        if not k.startswith('id_') and k.endswith('_' + id)
    }

print(groups)
将数据转换为更容易接受的形式:

{
  '397': {'350': 'try_3', '450': 'try_4'},
  '370': {'350': 'try_1', '450': 'try_2'},
}
这样,您就可以更直接地循环使用对象ID并使用以下值执行操作:

for thing_id, values_dict in groups.iteritems():
    # get thing from database, update it if needed
编辑:例如,要打印所有内容:

for thing_id, values_dict in groups.items():
    for value_id, value_value in values_dict.items():
        print(thing_id, value_id, value_value)
印刷品

397 350 try_3
397 450 try_4
370 350 try_1
370 450 try_2

是的,你完全明白我想做什么,你转换的列表实际上就是我想要的。让我来研究一下如何与django数据库查询相结合。非常感谢。还有一件事,我需要的是,如何在for循环中访问id 397及其值,如try\u 3非常感谢,你救了我一天:)