¿Usando Django bulk_create objetos en claves externas?

Estaba leyendo sobre Django bulk_create y algunas de sus “fallas”:

" This has a number of caveats though: 1. The model's save() method will not be called, and the pre_save and post_save signals will not be sent. 2. It does not work with child models in a multi-table inheritance scenario. 3. If the model's primary key is an AutoField it does not retrieve and set the primary key attribute, as save() does. " 

No lo entendí completamente. Así que si tengo una lista de objetos, pásala a bulk_create:

 objList = [a, b, c,] #none are saved model.objects.bulk_create(objList) 

¿Todavía podría usar estos objetos en claves externas bien?

 for obj in objList: o = otherModel(something='asdfasdf', fkey=obj) o.save() # will this be fine given the caveats stated above? 

Entonces, ¿la relación ForeignKey estará bien? También cuando dice 2. No funciona con modelos secundarios en un escenario de herencia de múltiples tablas, significa que cualquier modelo que herede de otro modelo (abstracto o no) no puede usar bulk_create?

    Intenta configurar los ID manualmente. Para evitar condiciones de carrera, asegúrese de envolver la función como una sola transacción.

     from django.db import transaction, models @transaction.commit_on_success def bulk_create_with_manual_ids(foo_list): id_start = (Foo.objects.all().aggregate(models.Max('id'))['id__max'] or 0) + 1 for i,foo in enumerate(foo_list): foo.id = id_start + i return Foo.objects.bulk_create(foo_list) objList = [Foo(),Foo(),Foo()] foo_objects = bulk_create_with_manual_ids(objList) Bar(foo=foo_objects[0]).save() 

    Tenga en cuenta que este enfoque no es adecuado para cualquier tabla que tenga un campo en serial u otra clave generada en la base de datos que se incremente automáticamente. La clave no se incrementará por la creación masiva ya que los ID se están generando en el lado de Django.

    Para la primera pregunta, no, no podrá hacer eso, porque obj no tendrá su clave principal configurada, por lo que no podría usarse como una clave externa.

    La segunda pregunta, no, eso no es lo que dice en absoluto. Menciona específicamente la “herencia de tablas múltiples”: la herencia de un modelo abstracto no es una herencia de tablas múltiples.