I have a model Folder which has a ForeignKey refering to itself in order to represent a folders structure : class Folder(models.Model): folder_name = models.CharField(max_length=200) parent_folder = models.ForeignKey('self', on_delete=models.CASCADE, blank=True, null=True) def __init__(self, *args, **kwargs): super(Folder, self).__init__(*args, **kwargs) if self.pk is not None: self.initial_filepath = self.filepath() def filepath(self): if not self.parent_folder: return f'media/scripts/{self.folder_name}' else: return f'{self.parent_folder.filepath()}/{self.folder_name}' The issue is, when deleting a folder that has childrens in the admin panel, a recursion error occurs. I was able to determine that it was coming from the filepath method called in the __init__ one. However, what I don't understand, is why this is happening as I don't really understand how the __init__ method work. Here's a glimpse of the unending traceback: Traceback (most recent call last): File "C:\Users\stephane.bernardelli\Documents\ScriptsApp\.env\lib\site-packages\django\db\models\fields\related_descriptors.py", line 187, in __get__ rel_obj = self.field.get_cached_value(instance) File "C:\Users\stephane.bernardelli\Documents\ScriptsApp\.env\lib\site-packages\django\db\models\fields\mixins.py", line 15, in get_cached_value return instance._state.fields_cache[cache_name] KeyError: 'parent_folder' During handling of the above exception, another exception occurred: **Exact same error repeating till a recursion error occurs** And when the recursion error occurs, I have a long message (too long for me to put it entirely) in which I found that : File "C:\Users\stephane.bernardelli\Documents\ScriptsApp\src\scripts\models.py", line 21, in __init__ self.initial_filepath = self.filepath() File "C:\Users\stephane.bernardelli\Documents\ScriptsApp\src\scripts\models.py", line 48, in filepath if not self.parent_folder: File "C:\Users\stephane.bernardelli\Documents\ScriptsApp\.env\lib\site-packages\django\db\models\fields\related_descriptors.py", line 189, in __get__ has_value = None not in self.field.get_local_related_value(instance) File "C:\Users\stephane.bernardelli\Documents\ScriptsApp\.env\lib\site-packages\django\db\models\fields\related.py", line 742, in get_local_related_value return self.get_instance_value_for_fields(instance, self.local_related_fields) File "C:\Users\stephane.bernardelli\Documents\ScriptsApp\.env\lib\site-packages\django\db\models\fields\related.py", line 764, in get_instance_value_for_fields ret.append(getattr(instance, field.attname)) admin.py class FolderAdmin(admin.ModelAdmin): fieldsets = [ (None, {'fields': ['folder_name']}), ('Parent Folder', {'fields': ['parent_folder']}), ] list_display = ('folder_name', 'parent_folder') admin.site.register(Folder, FolderAdmin) Continue reading...