基于代码的唯一约束Django模型

时间:2010-07-07 12:30:06

标签: python django django-models

我有一个看起来像这样的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 个答案:

答案 0 :(得分:5)

在您的模型定义中you can tell Django that 'name' should be unique

name = models.CharField(max_length=8, unique=True)

如果您尝试保存两个具有相同名称的记录,则会引发django.db.IntegrityError

答案 1 :(得分:0)

视图中的

try:
    Category.objects.get(name='name')
except Category.DoesNotExist:
    # call the save method of model