基于代码的Django模型唯一约束
我有一个Django模型,长得像这样:
class Categories(models.Model):
"""
Model for storing the categories
"""
name = models.CharField(max_length=8)
keywords = models.TextField()
spamwords = models.TextField()
translations = models.TextField()
def save(self, force_insert=False, force_update=False):
"""
Custom save method that converts the name to uppercase
"""
self.name = self.name.upper()
super(Categories, self).save(force_insert, force_update)
每当插入或更新数据时,我想检查一下是否已经存在同名的记录。这是我想通过代码来实现的唯一性约束,而不是通过数据库来实现。因为这个表里的数据量非常小,所以性能问题不是个大问题。如果出现约束冲突,我希望抛出Django自带的约束异常,而不是自己创建一个。
有人能告诉我最好的、最快的方法来实现这个吗?
谢谢。
2 个回答
-1
在视图中
try:
Category.objects.get(name='name')
except Category.DoesNotExist:
# call the save method of model
8
在你的模型定义中,你可以告诉Django,'name'这个字段必须是唯一的:
name = models.CharField(max_length=8, unique=True)
如果你试图保存两个名字相同的记录,就会出现一个叫django.db.IntegrityError
的错误。