Hi, I have a
ManyToManyField linking one model to another with a custom
through model, as follows:
class ModelA(Model): models_b = ManyToManyField("ModelB", through="ModelAModelBMapping") class Meta: default_related_name = "models_a" class ModelB(Model): pass class ModelAModelBMapping(Model): model_a = ForeignKey("ModelA", on_delete=CASCADE) model_b = ForeignKey("ModelB", on_delete=CASCADE)
(I recognize that in most circumstances I don’t need to define
ModelAModelBMapping; in my app I’m using
django-simple-history on that mapping table to track the history of associations between the two models.)
As far as I can tell, the correct way to link one object to many others using the
ManyToManyField is as follows:
a_instance: ModelA = ... # an instance of ModelA models_to_link: Iterable[ModelB] = ... # a bunch of ModelB instances that exist in the DB a_instance.models_b.add(*models_to_link)
I’m using Postgres as my database backend with Django 3.2. I’ve looked at the SQL queries that get generated and it seems that, regardless of how many instances are passed to the
add call, Django will try to add all the models in
models_to_link at once without doing any batching.
Is there a way to specify a batch size for these queries, or do I need to manually divide the
add calls into batches?