首页 > 解决方案 > 在 django admin 的保存模型中构造条件

问题描述

我有联系人模型,我想将其构建为只有 1 条记录,字段为 is_active=True。但我不想引发错误,我希望它通知我并且如果管理站点中之前存在 is_active=True 的联系人记录,则不要保存记录。“联系人不能同时拥有超过 1 个活动联系人。”

class Contact(models.Model):
    name = models.CharField(max_length=30)
    is_active = models.BooleanField(blank=True)

    def save(self, *args, **kwargs):
        if self.is_active:
            if Contact.objects.filter(Q(is_active=True), ~Q(id=self.id)):
            // raise ValidationError("Contact can't have more than 1 active contact at same time.")
        return super(Contact, self).save(*args, **kwargs)

标签: pythondjango

解决方案


在自定义save函数中,简单地而不是抛出错误,而是在不执行请求的情况下返回它:

class Contact(models.Model):
    name = models.CharField(max_length=30)
    is_active = models.BooleanField(blank=True)

    def save(self, *args, **kwargs):
        if self.is_active:
            if Contact.objects.filter(Q(is_active=True), ~Q(id=self.id)):
                return
        return super(Contact, self).save(*args, **kwargs)

推荐阅读