자기 자신의 레코드 중에 하나를 Foreign Key 로 등록하는 경우와 필드를 합쳐서 중복이 생기지 않도록 설정하는 방법을 알아보자.
길게 설명이 필요없다. 그냥 아래 예제로 끝
class PartsGroup(models.Model):
name = models.CharField(max_length=256, verbose_name="Name")
level = models.CharField(max_length=1, default="0", verbose_name="Level", null=True, blank=True)
parent = models.ForeignKey("self", on_delete=models.PROTECT, verbose_name="Parent", null=True, blank=True)
updated_at = models.DateTimeField(auto_now=True, null=True)
created_at = models.DateTimeField(auto_now_add=True, null=True)
class Meta:
constraints = [models.UniqueConstraint(fields=["name", "level"], name="partsgroup-name-unique")]
def __str__(self):
return f"{self.name}"
ForeignKey("self", ... )
이렇게 하면 자기 테이블 내에서 외부키를 지정할 수 있다.
class Meta 에서
name, level 필드를 합쳐서 중복이 없도록 설정하는 방법을 예제로 추가했다.
즉, name 만으로 중복 안되도록 unique를 주게 되면 다른 level 에 동일한 이름을 쓸 수가 없는데, 이렇게 해주면 level이 같은 놈들끼 name이 중복 안되록 해 주게 되므로 편리하게 활용할 수 있다.
오늘 팁은 여기까징
Bhuwan Dhingra 님의 사진, 출처: Pexels