How to add multiple objects to ManyToMany relationship at once in Django ?
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 ?
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])
Django does not call
obj.save() for each item but uses
To add on, If you want to add them from a queryset
# Returns a queryset permissions = Permission.objects.all() # Turns it into a list permissions = list(permissions) # Add the results to the many to many field (notice the *) group = MyGroup.objects.get(name='test') group.permissions.add(*permissions)
Django 1.9 adds additional ways for adding to a many-to-many relationship.
set is a new nicety:
>>> new_list = [obj1, obj2, obj3] >>> e.related_set.set(new_list)
- Database Administration Tutorials
- Programming Tutorials & IT News
- Linux & DevOps World
- Entertainment & General News
- Games & eSport