MCPcopy
hub / github.com/django/django / __init__

Method __init__

django/db/models/fields/related_descriptors.py:1082–1130  ·  view source on GitHub ↗
(self, instance=None)

Source from the content-addressed store, hash-verified

1080
1081 class ManyRelatedManager(superclass, AltersData):
1082 def __init__(self, instance=None):
1083 super().__init__()
1084
1085 self.instance = instance
1086
1087 if not reverse:
1088 self.model = rel.model
1089 self.query_field_name = rel.field.related_query_name()
1090 self.prefetch_cache_name = rel.field.name
1091 self.source_field_name = rel.field.m2m_field_name()
1092 self.target_field_name = rel.field.m2m_reverse_field_name()
1093 self.symmetrical = rel.symmetrical
1094 else:
1095 self.model = rel.related_model
1096 self.query_field_name = rel.field.name
1097 self.prefetch_cache_name = rel.field.related_query_name()
1098 self.source_field_name = rel.field.m2m_reverse_field_name()
1099 self.target_field_name = rel.field.m2m_field_name()
1100 self.symmetrical = False
1101
1102 self.through = rel.through
1103 self.reverse = reverse
1104
1105 self.source_field = self.through._meta.get_field(self.source_field_name)
1106 self.target_field = self.through._meta.get_field(self.target_field_name)
1107
1108 self.core_filters = {}
1109 self.pk_field_names = {}
1110 for lh_field, rh_field in self.source_field.related_fields:
1111 core_filter_key = "%s__%s" % (self.query_field_name, rh_field.name)
1112 self.core_filters[core_filter_key] = getattr(instance, rh_field.attname)
1113 self.pk_field_names[lh_field.name] = rh_field.name
1114
1115 self.related_val = self.source_field.get_foreign_related_value(instance)
1116 if None in self.related_val:
1117 raise ValueError(
1118 '"%r" needs to have a value for field "%s" before '
1119 "this many-to-many relationship can be used."
1120 % (instance, self.pk_field_names[self.source_field_name])
1121 )
1122 # Even if this relation is not to pk, we require still pk value.
1123 # The wish is that the instance has been already saved to DB,
1124 # although having a pk value isn't a guarantee of that.
1125 if not instance._is_pk_set():
1126 raise ValueError(
1127 "%r instance needs to have a primary key value before "
1128 "a many-to-many relationship can be used."
1129 % instance.__class__.__name__
1130 )
1131
1132 def __call__(self, *, manager):
1133 manager = getattr(self.model, manager)

Callers

nothing calls this directly

Calls 5

related_query_nameMethod · 0.80
_is_pk_setMethod · 0.80
__init__Method · 0.45
get_fieldMethod · 0.45

Tested by

no test coverage detected