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

2 投票
2 回答
7382 浏览
提问于 2025-04-16 00:56

我有一个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的错误。

撰写回答