限制示例化类的特定值为一- django

vbopmzt1  于 2023-02-10  发布在  Go
关注(0)|答案(1)|浏览(91)

我在django应用程序中有两个类projectplan
项目类和计划类都有一个is_global布尔字段,计划也有一个指向项目类的外键(项目有多个计划)。
我正在努力实现以下目标:对于项目和计划,每个都应该只有一个示例,其中is_global = true。全局计划应该属于全局项目。
有没有可能在django模型中实施这个逻辑?

d4so4syb

d4so4syb1#

您可以覆盖每个模型的save函数以检查之前的"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()

相关问题