docs: def update_many(objects, fields=[], using="default"):
      """Update list of Django objects in one SQL query, optionally only
      overwrite the given fields (as names, e.g. fields=["foo"]).
      Objects must be of the same Django model. Note that save is not
      called and signals on the model are not raised.
  
      Mostly from: http://people.iola.dk/olau/python/bulkops.py
      """
      if not objects:
          return
  
      import django.db.models
      from django.db import connections
      from django.db import transaction
      con = connections[using]
  
      names = fields
      meta = objects[0]._meta
      fields = [f for f in meta.fields
                if not isinstance(f, django.db.models.AutoField)
                and (not names or f.name in names)]
  
      if not fields:
          raise ValueError("No fields to update, field names are %s." % names)
  
      fields_with_pk = fields + [meta.pk]
      parameters = []
      for o in objects:
          parameters.append(tuple(f.get_db_prep_save(f.pre_save(o, True),
                            connection=con) for f in fields_with_pk))
  
      table = meta.db_table
      assignments = ",".join(("%s=%%s" % con.ops.quote_name(f.column))
                             for f in fields)
      con.cursor().executemany("update %s set %s where %s=%%s"
                               % (table, assignments,
                                  con.ops.quote_name(meta.pk.column)),
                               parameters)
      transaction.commit_unless_managed(using=using)