Ограничение количества инстанций класса с определенным значением до одного - django

У меня есть два класса в приложении django, project и plan

Класс проекта имеет поле is_global boolean, как и класс плана. План также имеет внешний ключ к классу проекта (проекты имеют несколько планов).

Я пытаюсь добиться следующего: для проектов и планов должно быть только по одному экземпляру каждого из них, где is_global = true. Глобальный план должен принадлежать глобальному проекту.

Возможно ли применить эту логику с помощью моделей django?

Вы можете переписать функцию сохранения каждой модели, чтобы проверить наличие предыдущих элементов 'is_global'

Модель проекта

def save(self):
    if self.is_global:
        other_global = Project.objects.filter(is_global=True).exists()
        if other_global:
            #handle the error, eg, raise an exception or send a message
            return
    super.save()   

Модель плана

def save(self):
    if self.is_global:
        other_global = Plan.objects.filter(is_global=True).exists()
        if other_global:
            #handle the error, eg, raise an exception or send a message
            return
        if not self.project.is_global:
            #handle the error, eg, raise an exception or send a message
            return 
    super.save()   
Вернуться на верх