比较两个Django模型实例列表

时间:2018-07-12 08:54:27

标签: python django

我有一个相当复杂的用例,需要比较两个字典列表,但是列表可以处于各种不同的状态,理想情况下,我希望能够将所有字典合并处理

此操作的背景是我有一个呈现为复选框表的表单,并且我试图获取表单的初始数据与更新时发回的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-

表单本身如下所示:

Matrix form

这只是我所关心的复选框

0 个答案:

没有答案