Ошибка рекурсии, вызванная методом __init__

У меня есть модель Folder, которая имеет ForeignKey, ссылающийся на себя, чтобы представить структуру папок :

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}'

Проблема в том, что при удалении папки, имеющей дочерние папки, возникает ошибка рекурсии. Я смог определить, что она возникает из-за метода filepath, вызываемого в методе __init__. Однако я не понимаю, почему это происходит, поскольку я не очень понимаю, как работает метод __init__.

Буду рад, если кто-нибудь поможет мне понять, как я могу решить эту проблему, так как в настоящее время я не знаю, что делать.

Вот взгляд на бесконечный след :

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**

Когда возникает ошибка рекурсии, у меня появляется длинное сообщение (слишком длинное, чтобы я мог изложить его полностью), в котором я обнаружил, что :

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))
Вернуться на верх