Как изменить функцию сохранения для модели в 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)