| 310 | return f"Delete model {self.name}" |
| 311 | |
| 312 | def state_forward(self, app_label: str, state: State) -> None: |
| 313 | model_ref = f"{app_label}.{self.name}" |
| 314 | |
| 315 | for model_state in state.models.values(): |
| 316 | for field_name, field in model_state.fields.items(): |
| 317 | if not isinstance(field, DIRECT_RELATION_FIELDS): |
| 318 | continue |
| 319 | |
| 320 | if field.model_name == model_ref: |
| 321 | raise IncompatibleStateError( |
| 322 | f"{model_ref} is still referenced from {model_state.app}.{model_state.name}" |
| 323 | ) |
| 324 | |
| 325 | model_state_to_delete = state.models.pop((app_label, self.name), None) |
| 326 | if not model_state_to_delete: |
| 327 | raise IncompatibleStateError() |
| 328 | |
| 329 | models_to_reload = set() |
| 330 | |
| 331 | for field in model_state_to_delete.fields.values(): |
| 332 | if not isinstance(field, DIRECT_RELATION_FIELDS): |
| 333 | continue |
| 334 | |
| 335 | models_to_reload.add(state.apps.split_reference(field.model_name)) |
| 336 | |
| 337 | state.apps.unregister_model(app_label, self.name) |
| 338 | state.reload_models(models_to_reload) |
| 339 | |
| 340 | async def database_forward( |
| 341 | self, |