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

前端 未结 3 1753
青春惊慌失措
青春惊慌失措 2020-12-22 18:04

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:

相关标签:
3条回答
  • 2020-12-22 18:57

    Django 1.9 adds additional ways for adding to a many-to-many relationship.

    Documentation: https://docs.djangoproject.com/en/dev/ref/models/relations/#django.db.models.fields.related.RelatedManager.set

    set is a new nicety:

    >>> new_list = [obj1, obj2, obj3]
    >>> e.related_set.set(new_list)
    
    0 讨论(0)
  • 2020-12-22 18:59

    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.

    0 讨论(0)
  • 2020-12-22 19:01

    To add on, If you want to add them from a queryset

    Example

    # Returns a queryset
    permissions = Permission.objects.all()
    
    # Add the results to the many to many field (notice the *)
    
    group = MyGroup.objects.get(name='test')
    
    group.permissions.add(*permissions)
    

    From: Insert queryset results into ManytoManyfield

    0 讨论(0)
提交回复
热议问题