(self, instance=None)
| 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) |
nothing calls this directly
no test coverage detected