angee.graphql.deletion
GraphQL delete-confirmation preview built on Django's deletion collector.
DeletePreviewGroup
@strawberry.type
class DeletePreviewGroup()A count of affected rows for one Django model.
label
Human-readable plural model label.
count
Number of affected rows for this model.
DeletePreviewNode
@strawberry.type
class DeletePreviewNode()One node in a cascade deletion preview tree.
label
Human-readable model or group label.
object_label
Human-readable object display label.
object_id
Public object id when the node represents a concrete row.
children
Child nodes below this preview node.
from_row
@classmethod
def from_row(cls, instance: models.Model) -> DeletePreviewNodeReturn a childless leaf node for one deleted row.
from_group
@classmethod
def from_group(cls, model: type[models.Model],
rows: _PreviewRows) -> DeletePreviewNodeReturn a grouped child node summarizing deleted rows of one model.
from_target
@classmethod
def from_target(
cls, instance: models.Model,
groups: dict[type[models.Model], _PreviewRows]) -> DeletePreviewNodeReturn the root node (the deletion target) with its grouped children.
DeletePreview
@strawberry.type
class DeletePreview()Cascade forecast for deleting one Django model instance.
total_deleted_count
Total number of rows Django would delete.
deleted
Rows Django would delete.
updated
Rows Django would update because of on_delete behavior.
blocked
Rows whose on_delete behavior blocks deletion.
has_blockers
Whether any related rows block deletion (i.e. blocked is non-empty).
root
Rooted tree of rows Django would delete; deleted counts include this root row.
from_instance
@classmethod
def from_instance(cls,
instance: models.Model,
actor: Any | None = None) -> DeletePreviewReturn Django's cascade forecast for instance.
Callers should run previews inside the same transaction as the eventual delete so fast-delete counts and visible rows share one database snapshot.
delete_by_public_id
def delete_by_public_id(model: type[models.Model],
public_id: str,
*,
confirm: bool = False,
queryset: models.QuerySet[models.Model] | None = None,
before_delete: Callable[[models.Model], None]
| None = None,
reason: str | None = None) -> DeletePreviewPreview, then optionally delete, one public-id-addressed model row.
The caller owns authorization. Passing reason elevates the lookup/delete under system_context for admin/action surfaces whose permission class has already gated the request actor.
attach_delete_preview_metadata
def attach_delete_preview_metadata(
surface: type[_SurfaceT],
*,
model: type[models.Model],
node: type,
field: str,
model_label: str | None = None,
public_id_field: str = PUBLIC_ID_FIELD_NAME) -> type[_SurfaceT]Attach resource metadata for one authored cascade-preview mutation.
_PreviewRows
@dataclass(slots=True)
class _PreviewRows()Access-scoped visible/count-only row state for one preview tree group.
add
def add(*, total_count: int, visible_count: int,
visible_rows: Iterable[models.Model]) -> NoneMerge one collector source into this model group.
by_model
@classmethod
def by_model(cls, root: models.Model, collector: Collector,
fast_deletes: tuple[_FastDelete, ...],
actor: Any | None) -> dict[type[models.Model], _PreviewRows]Return deleted tree rows grouped by model, excluding root.
from_collected
@classmethod
def from_collected(cls, root: models.Model, model: type[models.Model],
rows: Iterable[models.Model],
actor: Any | None) -> _PreviewRowsReturn access-scoped preview rows from collector-materialized rows.
from_fast_delete
@classmethod
def from_fast_delete(cls, queryset: models.QuerySet[models.Model],
total_count: int, actor: Any | None) -> _PreviewRowsReturn access-scoped preview rows from one fast-delete queryset.