onetomany - ¿Cómo agregar múltiples objetos a la relación ManyToMany a la vez en Django?
manytomanyfield django example (3)
Basado en el documento de Django, debería ser capaz de pasar múltiples objetos a la vez para agregarlo a una relación de muchos, pero obtengo un
* TypeError: tipo de ajuste: ''list''
cuando intento pasar un queryset de django en una lista. Pasar un Queryset o ValuesListQueryset también parece fallar. ¿Hay una mejor manera de usar un bucle for?
Django 1.9 agrega formas adicionales para agregar a una relación de muchos a muchos.
Documentación: https://docs.djangoproject.com/en/1.9/ref/models/relations/#django.db.models.fields.related.RelatedManager.set
set
es una nueva sutileza:
>>> new_list = [obj1, obj2, obj3]
>>> e.related_set.set(new_list)
Para agregar, si desea agregarlos desde un conjunto de consulta
Ejemplo
# 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)
Use: object.m2mfield.add(*items)
como se describe en la documentation :
add()
acepta una cantidad arbitraria de argumentos, no una lista de ellos.
add(obj1, obj2, obj3, ...)
Para expandir esa lista en argumentos, use *
add(*[obj1, obj2, obj3])
Apéndice:
Django no llama a obj.save()
para cada elemento, sino que usa bulk_create()
, en su lugar.