📜  django unique_together - Python (1)

📅  最后修改于: 2023-12-03 15:30:29.461000             🧑  作者: Mango

Django unique_together

介绍

在 Django 中,unique_together 是用于定义数据库表中字段组合的唯一性约束的选项。

通常情况下,我们都可以通过给某个字段添加 unique=True 的方式来保证该字段的唯一性。但是,如果我们需要保证多个字段的组合唯一,就需要使用 unique_together

使用方法
定义

在 Django 中,我们可以在模型中使用 unique_together 指定多个字段的组合是唯一的。例如,我们想要保证 Person 模型中的 first_namelast_name 两个字段的组合唯一,我们可以这样定义:

class Person(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)

    class Meta:
        unique_together = (('first_name', 'last_name'),)
迁移

在定义了模型的 unique_together 后,我们需要运行 Django 的数据库迁移命令来将其应用到数据库中。

python manage.py makemigrations
python manage.py migrate
使用

当我们试图创建或修改一个已存在的记录时,如果其所对应的多个字段的组合已经存在于数据库中,Django 会自动抛出一个 IntegrityError 错误。因此,我们可以通过捕获这个错误并进行相应的处理来控制多个字段的组合的唯一性。

例如,在视图函数中创建一个新的 Person 记录时,我们可以这样处理:

from django.db.utils import IntegrityError

def add_person(request):
    if request.method == "POST":
        first_name = request.POST.get("first_name")
        last_name = request.POST.get("last_name")
        try:
            Person.objects.create(first_name=first_name, last_name=last_name)
        except IntegrityError:
            # 处理唯一性冲突的情况
            pass
    # 其他处理逻辑
注意事项
  • 在定义 unique_together 时,必须将多个字段名封装在一个元组中。
  • 通过使用 unique_together 来指定多个字段的组合的唯一性时,需要在数据库中为这些字段创建唯一性约束索引。因此,在使用 unique_together 时,需要将其应用到已经存在的表格中会涉及到一些复杂的操作,因此需要特别注意。

以上就是 Django 中 unique_together 的介绍和使用方法。