我正在使用django和djangorest框架开发一个API,我想做的是为相关模型级联两个动作
1.删除一个示例,在models. ForeignKey上使用on_delete=modles.CASCADE就可以顺利完成。
1.激活和去激活问题就在这里
我在我的应用程序中定义的每个模型都有一个布尔字段is_active,它指示该示例是否处于活动状态,我在这里要做的是每当is_active字段更改时级联激活和停用,我希望以动态方式处理这一点,因为我的应用程序越来越大,我不想每次为任何模型创建新的外键时都手动更改此服务。
例如,我有以下模型
class Company(AbstractNamingModel):
name_en = models.CharField(_("English Name"), max_length=64, unique=True, null=True, blank=True)
name_ar = models.CharField(_("Arabic Name"), max_length=64, unique=True, null=True, blank=True)
is_active = models.BooleanField(
_("Is Active"),
blank=True,
default=True,
)
class Branch(AbstractNamingModel):
company = models.ForeignKey(
Company,
on_delete=models.CASCADE,
verbose_name=("Company branches"),
related_name="company_branches",
)
is_active = models.BooleanField(_("Is Active"), blank=True, default=True)
class Department(AbstractNamingModel):
branch = models.ForeignKey(
Branch,
on_delete=models.CASCADE,
verbose_name="Branch Departments",
related_name="branch_departments",
)
is_active = models.BooleanField(
_("Is Active"),
blank=True,
default=True,
)
class Employee(AbstractUser, TimeStampedModel):
id = models.UUIDField(primary_key=True, editable=False, default=uuid.uuid4)
name_en = models.CharField(_("English Name"), max_length=100)
name_ar = models.CharField(_("Arabic Name"), max_length=100)
company = models.ForeignKey(
Company,
on_delete=models.CASCADE,
blank=True,
null=True,
related_name="employees",
)
branch = models.ForeignKey(
Branch,
on_delete=models.CASCADE,
blank=True,
null=True,
related_name="employees",
)
department = models.ForeignKey(
Department,
on_delete=models.CASCADE,
blank=True,
null=True,
related_name="employees",
)
我想做的是,当我激活/停用一个公司时,我会级联操作来激活/停用所有分支、部门、员工以及公司、分支、部门或员工与该公司相关的任何其他模型示例,同样的事情也会发生在我的系统中的分支、部门、员工和所有模型上。
如何动态地处理这个问题,就像_delete models.CASCADE一样?
我尝试使用apps.get_models()方法,但这给了我应用程序中的所有模型,我被困在这里。
1条答案
按热度按时间xzabzqsa1#
如果你想换一种方式来思考你的问题,你所有的模型 * 共享 * 一个数据
is_active=True or False
。这个共享的数据片段应该在它自己的表中,每个记录都有一个FK(为了简单起见)。然后,当设置为不活动时,每个模型可以引用它,例如
类似这样的东西将允许您在每个公司的一个源中维护
is_active
(以及您希望在所有实体之间共享的任何其他内容