当Django在主键属性上运行.save()时,它首先执行SELECT以查看它是否已经存在,然后决定是执行INSERT还是UPDATE。有没有一种方法来优雅地做一个独特的,但不是主键字段?在创建它之前检查是否存在唯一值
基本上,如果模型是这样的:
class Subject(models.Model):
name = models.CharField(max_length=64, unique=True)
我希望做到以下几点而不发出一个错误
>>> 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
相反,我可以做“名”的PK,但我不确定使用非Dj的优雅方式来创建非pk独特的自动递增ID。
任何帮助表示赞赏。谢谢!
但[不要尝试](https://docs.djangoproject.com/en/dev/topics/db/queries/#retrieving-objects)使用模型管理器('self.objects.filter .. 。)从模型实例中。你必须做'Subject.objects.filter ...' – hobs 2013-05-17 22:29:33