class RelatedPopulator

from django.db.models.query import RelatedPopulator
RelatedPopulator is used for select_related() object instantiation.

The idea is that each select_related() model will be populated by a
different RelatedPopulator instance. The RelatedPopulator instances get
klass_info and select (computed in SQLCompiler) plus the used db as
input for initialization. That data is used to compute which columns
to use, how to instantiate the model, and how to populate the links
between the objects.

The actual creation of the objects is done in populate() method. This
method gets row and from_obj as input and populates the select_related()
model instance.

Ancestors (MRO)

  1. builtins.object
  2. django.db.models.query.RelatedPopulator
def populate(self, row, from_obj)
    def populate(self, row, from_obj):
        if self.reorder_for_init:
            obj_data = self.reorder_for_init(row)
            obj_data = row[self.cols_start : self.cols_end]
        if obj_data[self.pk_idx] is None:
            obj = None
            obj = self.model_cls.from_db(self.db, self.init_list, obj_data)
            for rel_iter in self.related_populators:
                rel_iter.populate(row, obj)
        self.local_setter(from_obj, obj)
        if obj is not None:
            self.remote_setter(obj, from_obj)