인프런 커뮤니티 질문&답변

벼락맞은대추나무님의 프로필 이미지

작성한 질문수

파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트

composite field에 대해서 auto increment 적용하기

22.01.05 17:32 작성

·

165

0

아래와 같은 클래스가 있습니다.

class Foo(models.Model):
  name = models.CharField(max_length=20)
  value = models.PositiveIntegerField(default=1, auto_increment=True)

  class Meta:
    constraints = [
      models.UniqueConstraints(fields=["name", "value"], name="unique name value")
    ]

위에서 value의 auto increment가 name 속성과 연관돼서 동작하도록 구성하고 싶습니다.

예를 들어 Foo(name="김길동")을 생성하면 name="김길동", value=1 레코드가 생성되고, 다시 Foo(name="김길동")를 생성하면 auto_increment로 name="김길동", value=2 레코드가 생성됩니다.
여기서 추가적으로 Foo(name="박길동")을 생성하면 value가 3이 아니라 다시 박길동에 대해서 처음부터 auto_increment가 동작되어 name="박길동", value=1로 생성되도록 하고 싶습니다.

이를 위해서 models.Model의 save 메서드를 오버라이딩하거나 validation을 사용하지않고 구현하는 방법이 있을까요?

 

답변 2

1

벼락맞은대추나무님의 프로필 이미지

2022. 01. 06. 15:02

save method를 오버라이딩하는 방식으로 구현했습니다.  

0

벼락맞은대추나무님의 프로필 이미지

2022. 01. 05. 17:35

constraints만으로 구현하는 것이 비효율적이거나 어렵다면 save를 오버라이딩하는 방식으로도 괜찮습니다.

하지만 save()를 오버라이딩 한다면 save()의 name 입력값에 대해서 value 최대값을 찾고 +1하는 방식으로 구현해야될 것 같은데 오버헤드가 발생하지는 않을까요?