Based on my knowledge of Django's codebase and the issue description, let me provide the patch. The issue is in `django/db/models/deletion.py` in the `Collector.delete()` method. When zero objects are deleted for "simple" models, the code still includes a dictionary entry with a zero count, while for models with foreign keys it returns an empty dictionary. The fix should ensure consistency by not including model labels with zero counts in the result dictionary. --- a/django/db/models/deletion.py +++ b/django/db/models/deletion.py @@ -408,6 +408,8 @@ class Collector: sender=model, origin=self.origin, ) + for model, instances in self.data.items(): + deleted_counter[model._meta.label] += len(instances) # update collected instances for instances_for_fieldvalues in self.field_updates.values(): for (field, value), instances in instances_for_fieldvalues.items(): @@ -418,8 +420,6 @@ class Collector: query = sql.UpdateQuery(model) query.update_batch(pk_list, {field.name: value}, self.using) - for model, instances in self.data.items(): - deleted_counter[model._meta.label] += len(instances) # fast deletes for qs in self.fast_deletes: count = qs._raw_delete(using=self.using) Wait, I need to reconsider. The issue is that when there are zero objects to delete, the inconsistency comes from how the `deleted_counter` is initialized and populated. Let me trace through the logic more carefully. The issue states: - Models with FK: result is `(0, {})` - Simple models: result is `(0, {'my_app.BlockLibrary': 0})` This suggests that for simple models, the counter is being incremented by 0, but the key is still added. The fix should filter out zero counts from the result. --- a/django/db/models/deletion.py +++ b/django/db/models/deletion.py @@ -431,4 +431,6 @@ class Collector: for model, instances in self.data.items(): for instance in instances: setattr(instance, model._meta.pk.attname, None) - return sum(deleted_counter.values()), dict(deleted_counter) + # Omit the model-label keys that have zero objects deleted. + return sum(deleted_counter.values()), { + model_label: count for model_label, count in deleted_counter.items() if count}