How to add multiple objects to ManyToMany relationship at once in Django ?

philgo20 picture philgo20 · Feb 10, 2011 · Viewed 90.1k times · Source

Based on the Django doc, I should be able to pass multiple objects at once to be added to a manytomany relationship but I get a

* TypeError: unhashable type: 'list'

when I try to pass a django queryset casted in a list. Passing a Queryset or a ValuesListQueryset seems to fail also. Is there a better way than use a for loop ?

Answer

Yuji 'Tomita' Tomita picture Yuji 'Tomita' Tomita · Feb 10, 2011

Use: object.m2mfield.add(*items) as described in the documentation:

add() accepts an arbitrary number of arguments, not a list of them.

add(obj1, obj2, obj3, ...)

To expand that list into arguments, use *

add(*[obj1, obj2, obj3])

Addendum:

Django does not call obj.save() for each item but uses bulk_create(), instead.