📜  unique_together 它在 django 中的用途 - Python (1)

📅  最后修改于: 2023-12-03 14:48:11.074000             🧑  作者: Mango

unique_together 它在 django 中的用途

在 Django 中,unique_together 是一个元组,用于定义一个由多个字段组成的联合唯一键。这意味着在数据库表中,这些字段的组合必须唯一,不能重复,否则就会抛出唯一性错误。

用法

unique_together 可以在模型的 Meta 中定义。例如:

class MyModel(models.Model):
    field_1 = models.CharField(max_length=50)
    field_2 = models.CharField(max_length=50)
    field_3 = models.CharField(max_length=50)

    class Meta:
        unique_together = (('field_1', 'field_2'), ('field_1', 'field_3'))

调用 unique_together 时需要以元组的形式传递一个或多个元组。每个元组都表示一个联合唯一键,包含要联合在一起的字段。在这个例子中,我们定义了两个联合唯一键,其中第一个联合唯一键包含 field_1field_2 字段,第二个联合唯一键包含 field_1field_3 字段。

注意:在 Django 2.2 中,unique_together 被标记为废弃。建议使用 UniqueConstraint 替代,它提供了更多的灵活性和可读性。

示例

以下是一个示例模型,它使用 unique_together 定义了一个联合唯一键:

class Customer(models.Model):
    name = models.CharField(max_length=50)
    email = models.EmailField()
    phone_number = models.CharField(max_length=20, blank=True)
  
    class Meta:
        unique_together = ('name', 'email')

在这个例子中,我们定义了一个 Customer 模型,包含了 nameemailphone_number 字段。我们要确保每个客户名字和邮箱的组合都是唯一的,所以我们使用了 unique_together 来定义这个联合唯一键。

这意味着如果在数据库中已经存在一个客户名为 'John',邮箱为 'john@smith.com',那么如果我们尝试添加另一个名为 'John',邮箱也为 'john@smith.com' 的客户,Django 将引发一个唯一性错误。

总结

在 Django 中,unique_together 用于定义一个由多个字段组成的联合唯一键。它可以确保我们的数据库表中的某些字段组合不会重复出现。它是一个强大的工具,可以在开发 Web 应用程序时提供额外的数据完整性保障。