Как изменить функцию сохранения для модели в Django

У меня проблема. В моей модели отдела я переопределяю функцию save. Логика следующая: каждый отдел может иметь один вышестоящий отдел, а один отдел может иметь много дочерних отделов. Мой первый вариант if работает правильно, если я выбираю вышестоящий отдел, то при сохранении существующего экземпляра, этот вышестоящий отдел в результате имеет себя в качестве дочернего.

Но мой второй if не работает. У вас есть идеи, что я делаю неправильно?

class Department(models.Model):
    id          = models.AutoField(primary_key=True)
    title       = models.CharField(max_length=50)
    description = models.CharField(max_length=300,              blank=True, verbose_name='description')
    subsidiary  = models.ManyToManyField(   'self', blank=True, symmetrical=False, related_name='subsidiary_name')
    superior    = models.ForeignKey(        'self', null=True,  blank=True, related_name='superior_name', on_delete = models.SET_NULL)
    manager     = models.ForeignKey(        Manager, related_name='manager_name', null=True, on_delete = models.SET_NULL)
    status      = models.BooleanField(default=True)
    proxy       = models.ForeignKey(        Manager, on_delete = models.SET_NULL, blank=True, verbose_name='Proxy', null=True, related_name='proxy_name')       # TODO
    history     = HistoricalRecords()

    def get_subsidiary(self):
        return "\n".join([p.title for p in self.subsidiary.all()])

    def __str__(self):
        return self.title

    def save(self, *args, **kwargs):
        
        super().save(*args, **kwargs)

        # override superior instance by adding subsidiary instance automatically
        if self.superior:
            superior_department = Department.objects.get(title=self.superior.title)
            superior_department.subsidiary.add(self)

        if self.subsidiary:
            subsidiary_dep = Department.objects.filter(title__in=self.subsidiary.values('title'))
            for dep in subsidiary_dep:
                dep.superior.add(self)
Вернуться на верх