2015-06-03 17 views

Odpowiedz

12

Jak wspomniano bulk_create nie wyzwala tych sygnałów -

https://docs.djangoproject.com/en/1.8/ref/models/querysets/#bulk-create

Metoda ta wstawia dostarczonego listę obiektów do bazy danych w sposób efektywny (zwykle tylko 1 zapytań, bez względu na to ile obiekty istnieją).

ten ma szereg zastrzeżeń choć: metoda

  • modelu za save() nie zostanie wywołana, a sygnały pre_save i post_save nie zostanie wysłany.
  • Nie działa z modelami podrzędnymi w scenariuszu dziedziczenia wielu tabel.
  • Jeśli klucz podstawowy modelu to AutoField, nie pobiera on i nie ustawia atrybutu klucza głównego, jak to robi save().
  • Nie działa z relacjami wiele do wielu.
  • Parametr batch_size określa liczbę obiektów tworzonych w pojedynczym zapytaniu. Domyślnie tworzone są wszystkie obiekty w jednej partii, z wyjątkiem SQLite, gdzie domyślnie jest tak, że co najwyżej 999 zmiennych jest używanych na kwerendę.

Musisz więc uruchomić je ręcznie. Jeśli chcesz, to dla wszystkich modeli można zastąpić bulk_create i wysłać je sam jak ten -

class CustomManager(models.Manager): 
    def bulk_create(items,....): 
     super().bulk_create(...) 
     for i in items: 
       [......] # code to send signal 

Następnie za pomocą tego menedżera -

class Task(models.Model): 
    objects = CustomManager() 
    .... 
Powiązane problemy