I have two lists of objects:
m2m_links = mymodel._meta.many_to_many
o2m_links = mymodel._meta.get_all_related_objects()
There is an object
to remove the intersection between two list you should use 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])
Use remove
:
some_list.remove(some_item)
See: http://docs.python.org/tutorial/datastructures.html
However, if the item doesn't match, it'll raise a ValueError
, so unless you're sure the item is actually in the list, catch the error.
You can use a set and a list comprehension to filter the list:
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]