UniqueConstraint 사용 예시

UniqueConstraint에 대한 설명과 django Model클래스의 Meta 클래스에 대한 설명은 아래의 글을 통해 확인할 수 있습니다.

 

Django Model에서의 Meta 클래스

Meta Python에서 'Meta'클래스는 일반적으로 Django 프레임워크에서 models, forms, serializers, views 와 같은 클래스에 대한 추가 정보를 제공하는 데 사용합니다. Meta 클래스는 Django 클래스에 대한 다양한 옵

yesaroun.tistory.com

 

UniqueConstraint 사용 예시

1. True이면서 고유한 경우만

class Employee(models.Model):
    name = models.CharField(
        max_length=100,
    )
    department = models.ForeignKey(
        Department,
        on_delete=models.CASCADE,
    )
    is_manager = models.BooleanField(
        default=False,
    )

    class Meta:
        constraints = [
            models.UniqueConstraint(
                name="unique_manager",
                fields=["department", "is_manager"],
                condition=models.Q(is_manager=True),
            ),
        ]

이 예시는 Employee 모델이 있고 각 department에 고유한 관리자(manager)가 있는지 확인할 수 있는 예시입니다. 관리자인 경우(is_manager가 True)이면서, 고유한 department인지를 UniqueConstraint를 정의해서 확인할 수 있습니다.

2. null이면서 고유한 경우만

class MyModel(models.Model):
    field1 = models.CharField(null=True)
    field2 = models.CharField(null=True)

    class Meta:
        constraints = [
            models.UniqueConstraint(
                name="unique_fields",
                fields=["field1", "field2"],
                condition=models.Q(field1__isnull=False) & models.Q(field2__isnull=False),
            ),
        ]

기존 'unique_together'를 사용하면 null 값을 포함하는 필드 간에 고유성을 적용할 수 없었습니다. 하지만 'UniqueConstraint'에서는 null 값을 다룰 수 있습니다. 위의 예시는 'field1', 'field2' 둘 다 null이 아닌 값에만 적용되도록 하는 조건이 있습니다.

 


부족하거나 잘못된 내용이 있을 경우 댓글 달아주시면 감사하겠습니다.

이 글에 부족한 부분이 존재할 경우 추후에 수정될 수 있습니다.