2012-06-01 19 views
21

Me preguntaba si existe el equivalente de "agregar todos" o "crear a granel" para muchas relaciones que reducen la cantidad de consultas (haré esto por un Larga lista)?django 1.4 Muchos a muchos agregar bulk

La documentación sobre este tema parecen sugerir que esto no es posible:

https://docs.djangoproject.com/en/dev/topics/db/examples/many_to_many/

**Associate the Article with a Publication:** 
a1.publications.add(p1) 

**Create another Article, and set it to appear in both Publications:** 
a2 = Article(headline='NASA uses Python') 
a2.save() 
a2.publications.add(p1, p2) 
a2.publications.add(p3) 

Respuesta

4

Por supuesto que es posible! Solo tiene que crear un intermediate table explícito y y luego usar el método bulk_create de este modelo.

+17

En realidad, una tabla intermedia explícita no es necesario, consulte http://stackoverflow.com/a/10116452/5112 –

+0

@Tim Lo he olvidado. ¡Buena atrapada! – rantanplan

23

Si desea agregar queryset a granel añadir o eliminar método de muchos a muchos modelos de relación:

qs = Article.objects.all() 
publications = Publications.objects.get(id=1) 

publications.article_set.add(*qs) 
publications.save() 
publications.article_set.remove(*qs) 
publications.save() 
+1

También puede simplemente usar 'publications.article_set.set (qs)' también. – citadelgrad

Cuestiones relacionadas