2011-12-01 15 views
5

Ésta es la representación de mis modelos:Django: ahorro de campos múltiples ManyToMany dentro de una transacción

class B(models.Model): 
    """I'm a dummy model, so doesn't pay atention of what I do""" 
    name = models.CharField(max_length=250) 

class A(models.Model): 
    name = models.CharField(max_length=250) 
    many_b = models.ManyToManyField(B) 

Ahora, supongamos que tengo una lista de objetos B. Y un solo objeto A que se relacionará con ese B s. Algo como esto:

a = A.objects.get(id=1) 
list_of_b = [B<name='B1'>,B<name='B2'>,B<name='B3'>,] 

La forma en que los relaciono ahora es la siguiente:

for b_object in list_of_b: 
    a.many_b.add(b_object) 

¿Hay alguna forma de añadir todos los objetos B en una sola transacción? Tal vez en un solo método, como:

a.many_b.addList(b) #This doesn't exist 

Respuesta

5

From the docs:

>>> john = Author.objects.create(name="John") 
>>> paul = Author.objects.create(name="Paul") 
>>> george = Author.objects.create(name="George") 
>>> ringo = Author.objects.create(name="Ringo") 
>>> entry.authors.add(john, paul, george, ringo) 

Así que si usted tiene una lista, el uso argumento de expansión:

a.many_b.add(*list_of_b) 
+0

¡Gracias! No sabía sobre la expansión del argumento. Si toda la vista está dentro de una transacción, ¿esta llamada se ejecuta dentro de esa transacción? – santiagobasulto

+1

@santiagobasulto Sí, el middleware de transacción debe poner todas las escrituras en una transacción, incluido esto. –

Cuestiones relacionadas