Lau*_*MET 5 python django orm django-models
这是Python 3.8与Django 3.1.3
我有一个具有独特领域的模型
class SomeModel(models.Model):
name = models.CharField(max_length=200, unique=True)
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种在存在唯一约束违规时自动更改字段值的方法。
如果我创建一个新实例,而name="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
Run Code Online (Sandbox Code Playgroud)
没有找到执行此操作的方法,我想我必须重写保存方法并捕获唯一约束错误才能执行此操作。有任何想法吗 ?谢谢
如果数据库中的条目已具有相同的值,则违反 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()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6627 次 |
| 最近记录: |