2012-06-01 9 views
21

Zastanawiam się, czy istnieje odpowiednik "dodaj wszystko" lub "masowe tworzenie" dla wielu do wielu relacji, które zmniejszają liczbę zapytań (zrobię to dla długa lista)?django 1.4 Wiele-to-luzem dodać

Docs na ten temat wydają się sugerować, że nie jest to możliwe:

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) 

Odpowiedz

4

Oczywiście jest to możliwe! Trzeba tylko utworzyć wyraźne intermediate table i , a następnie zastosować metodę tego modelu: bulk_create.

+17

Właściwie wyraźne stół pośredni nie jest konieczne, patrz http://stackoverflow.com/a/10116452/5112 –

+0

@Tim Zapomniałem o tym. Dobry połów! – rantanplan

23

Jeśli chcesz dodać do queryset zbiorczo dodać lub usunąć metodę wiele do wielu modeli zależności:

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

Możesz także użyć 'publications.article_set.set (qs)'. – citadelgrad

Powiązane problemy