2012-04-03 3 views
3

У меня есть к моделям:Django: Наиболее эффективные дополнения «Много-ко-многим» без сквозной модели?

class A(Model): 
    b = models.ManyToManyField(B) 

class B(Model): 
    # fields 

Что является наиболее эффективным способом, чтобы добавить большое количество существующих экземпляров B в отношениях?

+0

Любая конкретная причина, почему вам необходимо/желательно, чтобы избежать сквозной модели? –

+1

У меня нет никаких дополнительных данных, поэтому он мне не нужен. – Martin

ответ

3

В Джанго 1.4, вы можете make use of a bulk_create метод, чтобы создать многочисленные объекты B в один присест, а затем добавить их в Ab ManyToMany

Так создать список B объектов, основная часть их создания, а затем добавить их (all at once) в ManyToMany отношения вашего A экземпляра (ов):

l = [ 
    B(...), 
    B(...), 
    B(...), 
    ... 
] 
B.objects.bulk_create(l) 
a.b.add(*o) 
+0

Есть ли способ получить 'a.b.add (o)' более эффективный? Повторяя записи в списке, django отправит вставку для каждого экземпляра. – Martin

+1

Я обновил ответ. Вы можете добавить распакованный список объектов одновременно, но я думаю, что он все равно сделает вызов БД на каждом из них –

+0

«with transaction.atomic():» (из транзакции импорта django.db) – Bob

Смежные вопросы