ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Django UniqueConstraint
    Django 2022. 10. 7. 16:06

    번호표라는 모델이 있다고 가정해보자

    순서를 정확히 정하기 위해 번호표에 번호는 유니크해야 할 것이다.

    class Numberticket(models.Model):
        user = models.ForeignKey()
        number = models.PositiveIntegerField(unique=True)

    번호표의 번호를 유니크하게 하려면 모델에 필드에 unique=True 옵션을 주면 번호는 유니크하게 된다.

     

    또 다른 생각을 해보자

    매일 새로운 번호표를 만들어주기위해 날짜가 있고 각 날짜에 번호표가 유니크하게 필요하다고 가정해보자

    그렇다면 날짜, 번호를 묶어서 유니크한 필드로 구성해야 할 것이다.

    django 에서는 unique_together, UniqueConstraint로 2개 이상의 필드를 묶어 유니크하게 동작하도록 할 수 있다.

    그러나 장고 공식 문서에 따르면 UniqueConstraint를 사용하는 것을 권장한다.

    그 이유로는 unique_together에 이렇게 명시되어 있다.

    • 대신 constraints 옵션과 함께 UniqueConstraint를 사용하십시오.
    • UniqueConstraint는 unique_together보다 더 많은 기능을 제공합니다.
    • unique_together는 향후 더 이상 사용되지 않을 수 있습니다.

    권장하는 방식으로 구현해보자 

    class Numberticket(models.Model):
        user = models.ForeignKey()
        number = models.PositiveIntegerField()
        date = models.DateField()
    
        class Meta:
            constraints=[
            	models.UniqueConstraint(
                fields=["date", "number"],
                name="date_numberticket"
                )
            ]

    위의 예시대로 구현해볼 수 있다.

    번호표의 각 날짜별 번호는 유니크하게 구성된다.

     

    'Django' 카테고리의 다른 글

    Django Redis cache  (1) 2023.01.03
    Django timezone  (0) 2022.10.14
    Django Signal  (1) 2022.09.29
    Django unittest pytest  (0) 2022.09.28
    Django ORM Manager, QuerySet  (2) 2022.09.26

    댓글

Designed by Tistory.