我有一个相当复杂的用例,需要比较两个字典列表,但是列表可以处于各种不同的状态,理想情况下,我希望能够将所有字典合并处理
此操作的背景是我有一个呈现为复选框表的表单,并且我试图获取表单的初始数据与更新时发回的cleaned_data
之间的差异(即选中或未选中复选框)。
因此,通常,初始数据将仅包含已选中复选框的数据,例如
initial_data = [<Event: Event object>, <Event: Event object>, <Event: Event object>, <Event: Event object>]
其中一个Event对象包含一个ID和一个名称,它们可以与相同的事件相同。
如果未选中此复选框,则cleaned_data
可能看起来像这样:
cleaned_data = [<Event: Event object>, None, <Event: Event object>, None]
在这种情况下,我想从initial_data中获取事件,而cleaned_data中没有任何事件。下一个用例是,如果选中了复选框,则初始数据可能如下所示:
initial_data = [<Event: Event object>, <Event: Event object>]
,然后像这样清除数据:
cleaned_data = [<Event: Event object>, <Event: Event object>, <Event: Event object>, <Event: Event object>]
在这种情况下,我想从cleaned_data返回与initial_data不匹配的事件。
还有第三部分使事情复杂化,如果没有选中复选框的行也显示为“无”。所以我也需要处理:
initial_data = [<Event: Event object>, <Event: Event object>]
cleaned_data = [<Event: Event object>, None, <Event: Event object>, <Event: Event object>]
因此,为了澄清我要做什么,如果表单cleaned_data
中有相应的None,则返回初始事件数据;如果{{1}中存在差异,则返回事件和Nones。 },从初始数据中删除无。
我一直试图用这样的东西做
:cleaned_data
但这仅适用于我的一个用例(它适用于第二种情况,但对于第一种情况,它返回Nones而不是事件)。
在此方面的任何帮助将不胜感激,因为我觉得我已经很接近了,但我只是想不通!
感谢您的时间。
P.S。这是events = [[x for x in cleaned_data if x not in initial_data], [x for x in initial_data if x not in cleaned_data]]
应用程序的一部分
-编辑-
表单代码如下:
Django
它也使用django-extraforms。基本上,activity_group和event具有中间模型activityevent,因此,在创建新链接时,还需要创建一个新的activityevent,并且在删除链接时也需要将其删除。
-EDIT2-
表单本身如下所示:
这只是我所关心的复选框