Python/django

UniqueConstraint

알면 알 수록 재밌다! 2023. 6. 21. 16:14
class Test(models.Model):
    house = models.ForeignKey(
        "house.House", verbose_name="집", on_delete=models.DO_NOTHING, db_constraint=False, db_index=False
    )
    name = models.CharField(max_length=50, verbose_name="이름", null=True)
    title = models.CharField(max_length=50, verbose_name="제목", null=True)

    class Meta:
        verbose_name = "테스트"
        verbose_name_plural = verbose_name
        db_table = "test"
        
        constraints = [
            models.UniqueConstraint(fields=["id", "name", "title"], name="ux_testid")
        ]

위처럼 작성했을 때,

 

name, title이 같은 데이터로 들어갔을 때 duplicate 에러가 난다.

넣은 3개중 2개가 중복이라면 duplicate error 가 날 것이다.

 

첫번째 데이터로 name = "test", "title"="test",

두번째 데이터로 name= "test", "title"="test" 라면

두개의 컬럼 데이터가 중복이므로 duplicate error가 난다.

 


나의 경우에는 

constraints = [
            models.UniqueConstraint(fields=["house_id", "name", "title"], name="ux_houseid")
        ]

house_id는 각 집마다 공통이고, name을 중복값으로 넣었더니 2개가 중복인 데이터였으므로 duplicate error가 떴다.

해당 여러개의 컬럼을 중복키 설정할 때 유의해서 써야할 것 같다.