在创建之前检查是否存在唯一值

Pet*_*r O 13 django django-models

当Django在主键属性上运行.save()时,它首先执行SELECT以查看它是否已存在,然后决定是执行INSERT还是更新.有没有办法优雅地为独特但不是主键字段做同样的事情?

基本上,如果模型看起来像这样:

class Subject(models.Model):
    name = models.CharField(max_length=64, unique=True)
Run Code Online (Sandbox Code Playgroud)

我想在不抛出错误的情况下执行以下操作

>>> s=Subject(name="A new subject")
>>> s.save()
>>> s
<Subject: A subject>
>>> s=Subject(name="A new subject")
>>> s.save()
--- django.db.utils.IntegrityError: column name is not unique
Run Code Online (Sandbox Code Playgroud)

相反,我可以将'命名'命名为pk,但我不确定是否有一种优雅的Django方法来制作非pk独特的自动递增ID.

任何帮助表示赞赏.谢谢!

Dan*_*man 27

只是用get_or_create.

s, created = Subject.objects.get_or_create(name="A new subject")
Run Code Online (Sandbox Code Playgroud)