| 168 | return self._model |
| 169 | |
| 170 | def state_forward(self, app_label: str, state: State) -> None: |
| 171 | model_state = ModelState.make_from_model(app_label, self.model) |
| 172 | state.models[(app_label, self.name)] = model_state |
| 173 | |
| 174 | models_to_reload = {(app_label, self.name)} |
| 175 | |
| 176 | for field in model_state.fields.values(): |
| 177 | if not isinstance(field, DIRECT_RELATION_FIELDS): |
| 178 | continue |
| 179 | |
| 180 | related_key = state.apps.split_reference(field.model_name) |
| 181 | if related_key in state.models: |
| 182 | models_to_reload.add(related_key) |
| 183 | |
| 184 | # Also find existing models that reference the newly created model. |
| 185 | # This handles the case where a model with a FK was created before its |
| 186 | # target (e.g. alphabetical ordering: Alert before Warehouse). |
| 187 | new_model_ref = f"{app_label}.{self.name}" |
| 188 | for key, existing_state in state.models.items(): |
| 189 | if key == (app_label, self.name): |
| 190 | continue |
| 191 | for field in existing_state.fields.values(): |
| 192 | if isinstance(field, DIRECT_RELATION_FIELDS) and field.model_name == new_model_ref: |
| 193 | models_to_reload.add(key) |
| 194 | break |
| 195 | |
| 196 | state.reload_models(models_to_reload) |
| 197 | |
| 198 | async def database_forward( |
| 199 | self, |