Перезапись метода сохранения для обеспечения целостности в базе данных не работает

У пользователя всегда есть одна приборная панель по умолчанию для каждой компании, с которой он связан. Они могут добавлять новые приборные панели, но как только они устанавливают одну из них по умолчанию, другая сбрасывается. Чтобы добиться этого, я попробовал переписать метод сохранения в модели Dashboard:

def save(self, *args, **kwargs):
    if self.is_default:
        for dash in Dashboard.objects.filter(user=self.user, company=self.company):
            if dash.is_default:
                dash.is_default = False
                dash.save()
    else:
        if Dashboard.objects.filter(user=self.user, company=self.company, is_default=True).exclude(id=self.id).count() == 1:
            raise ValidationError(
                'There has to be a default dashboard per company for this user.')
    return super().save(*args, **kwargs)

Приведенный выше код не работает, так как он позволяет мне установить приборную панель с is_default=False и не вызывает ValidationError, если критерии не выполняются.

Я предлагаю следующее изменение:

...
if not Dashboard.objects.filter(user=self.user, company=self.company, is_default=True).exclude(id=self.id).exists():
    raise ValidationError()
...
Вернуться на верх