我有两个对象列表:
m2m_links = mymodel._meta.many_to_many
o2m_links = mymodel._meta.get_all_related_objects()
o2m_links中有一个我希望省略/删除的对象。它可以通过以下方式识别:
for r in m2m_links:
if not r.rel.through._meta.auto_created:
# Delete o2m_links object that has the same name as r.rel.through._meta.object_name
如何删除符合此循环命中条件的o2m_links对象?
答案 0 :(得分:14)
要删除两个列表之间的交集,您应该使用set
a = set(range(10))
b = set(range(5,15))
a-b
>>set([0, 1, 2, 3, 4])
b-a
>>set([10, 11, 12, 13, 14])
答案 1 :(得分:2)
您可以使用集合和列表推导来过滤列表:
names_to_remove = set([r.rel.through._meta.object_name for r in m2m_links if not r.rel.through._meta.auto_created])
filtered_list = [r for r in o2m_links if r.rel.through._meta.object_name in names_to_remove]
答案 2 :(得分:0)
使用remove
:
some_list.remove(some_item)
请参阅:http://docs.python.org/tutorial/datastructures.html
但是,如果该项目不匹配,则会引发ValueError
,因此,除非您确定该项目实际位于列表中,否则请抓住错误。