如何确保只启用一行?

时间:2016-02-16 18:20:09

标签: django django-models

我的webapp为某些后端任务提供了许多配置参数。这些配置参数存储在数据库中,因此可以通过管理员轻松编辑它们。

我想提供试验几个设置的选项,但有一个约束:只能启用一行。

如何确保只启用一行?如何在管理员中提供界面以选择启用哪一行?

请注意,我不想将可能的配置行数限制为一个:我确实想要提供多个参数集的选项,但只有一个必须是活动的。

1 个答案:

答案 0 :(得分:1)

您可以为该模型定义pre_save信号。如果您看到enabled标志设置为true,则在那里查询当前启用的所有配置。您禁用所有这些并保存当前实例:

def unique_enabled(sender, instance, **kwargs):
    if instance.enabled:
        for other in Config.objects.filter(enabled=True).exclude(id=instance.id):
            other.enabled = False
            other.save()