【问题标题】:Django Model Manage UNIQUE constraint error in save method保存方法中的 Django 模型管理 UNIQUE 约束错误
【发布时间】:2021-03-14 14:54:09
【问题描述】:

这是 Python 3.8 和 Django 3.1.3

我有一个具有唯一字段的模型

class SomeModel(models.Model):
    name = models.CharField(max_length=200, unique=True)

如果存在 UNIQUE 约束违规,我正在寻找一种自动更改字段值的方法

如果我创建了一个名为“kevin”的新实例,而另一个同名的实例已经存在“kevin”,它会在调用 save() 时更改新实例的名称并带有后缀

例如:数据库为空

>>> foo = SomeModel()
>>> foo.name = "kevin"
>>> foo.save()

# again
>>> foo = SomeModel()
>>> foo.name = "kevin"
>>> foo.save()

# and again
>>> foo = SomeModel()
>>> foo.name = "kevin"
>>> foo.save()


>>> for foo in SomeModel.objects.all():
>>>    print(foo.name)

kevin
kevin_01
kevin_02

没有找到执行此操作的方法,我想我必须重写保存方法并捕获唯一约束错误才能执行此操作。有任何想法吗 ? 谢谢

【问题讨论】:

    标签: python django django-models orm


    【解决方案1】:

    如果数据库中的条目已经具有相同的值,则违反 UNIQUE 约束的模型实例将引发 IntegrityError,因此处理此问题的传统方法是在模型上使用 try/except 块的自定义保存方法中。

    from django.db import IntegrityError
    
    class SomeModel(models.Model):
        name = models.CharField(max_length=200, unique=True)
    
        def save(self, *args, **kwargs):
            try:
                self.name = 'kevin'
                super(SomeModel, self).save(*args, **kwargs)
                doSomething()
            except IntegrityError:
                doSomethingElse()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-05
      • 1970-01-01
      • 2016-05-26
      • 2020-02-26
      • 2017-03-04
      相关资源
      最近更新 更多