당신은 멋쟁이, 우리는 장고쟁이~

0%

Django Models 6편 - Fields (verbose field names)

Models - Fields (verbose field names)


ForeignKey, ManyToManyField 그리고 OneToOneField 들을 제외한, 각 필드 타입은 선택적으로 첫번째 위치인자로, verbose name 을 받습니다.


verbose name 이 주어지지 않았을때는, Django 는 자동으로 field 의 속성명의 언더스코어를 공백으로 전환하여 verbose name 을 생성합니다.


verbose name 은

사용자가 사용하는 자세한 이름을 의미합니다


verbose name 을 지정하지 않으면, 어드민에 표시되는 이름이 이상하다는것을 느낄수 있을겁니다.



아래 예시에서, verbose name 은 “person’s first name” 입니다


1
first_name = models.CharField("person's first name", max_length=30)

아래 예시에서는, verbose name 이 “first name” 입니다.

필드 타입의 첫번째 인자로, verbose name 이 명시되지 않았기 때문에,

필드명 first_name 에서, 언더스코어를 공백으로 전환하여 verbose name 을 표시합니다.


1
first_name = models.CharField(max_length=30)

verbose_name 을 정의한 모델의 예시입니다.


1
2
3
4
class Members(models.Model):
name = models.CharField(max_length=50, verbose_name='이름')
nick_name = models.CharField(max_length=50, verbose_name="닉네임")
birth_date = models.DateField(verbose_name="생년월일", null=True)

위 Members 모델에서는, name, nick_name, birth_date 이 각각 한글로 표시된 verbose_name 들을 어드민에 표시할것입니다.


외래키 모델들


아직 살펴보지는 않았지만, ForeignKey, ManyToManyField 그리고 OneToOneField 들은 첫번째 인자로 모델 클래스가 옵니다.

따라서, verbose_name을 키워드 인자로 사용해줍니다.


1
2
3
4
5
6
7
8
9
10
11
poll = models.ForeignKey(Poll, on_delete=models.CASCADE, verbose_name="the related poll")
# poll 은 ForeignKey (외래키) 로 Poll 이라는 클래스를 첫번째 인자로 받음
# verbose_name 은 키워드 인자로 넣어줌

sites = models.ManyToManyField(Site, verbose_name="list of sites")
# sites 는 ManyToManyField 로 Site 라는 클래스를 첫번째 인자로 받음
# verbose_name 은 키워드 인자로 넣어줌

place = models.OneToOneField(Place, on_delete=models.CASCADE, verbose_name='related place')
# place 는 OneToOneField 로 Place 라는 클래스를 첫번째 인자로 받음
# verbose_name 은 키워드 인자로 넣어줌

위의 예시에서는, 단지 ForeignKey, ManyToManyField 그리고 OneToOneField 를 사용할때에, verbose_name 이 어떻게 키워드 인자로 들어가는지에 대한 코딩 스타일만 보여주고 있습니다.


관례적으로,

verbose_name 의 첫번째 글자는 대문자로 써주지 않습니다.

Django 가 필요할때 자동으로 첫번째 글자를 대문자화 해줍니다.


마치며..


verbose_name 에 대해서 알아보았습니다.
verbose_name 을 사용하면, 어떤것이 달라지는지 완벽한 예시가 있으면 좋았을텐데,

현재까지는, verbose_name 을 사용할경우, 해당 필드가 어드민에 표시되는 바가 달라지게 된다는점을 알고 넘어가면 될것 같습니다.


지난 포스팅에서 Runner 모델을 작성했었는데, 아래와 같이,

name 필드에 verbose_name 을 추가해주었습니다. “러너 이름”


1
2
3
4
5
6
7
class Runner(models.Model):
MedalType = models.TextChoices('MedalType', 'GOLD SILVER BRONZE')
name = models.CharField("러너이름", max_length=60)
medal = models.CharField(blank=True, choices=MedalType.choices, max_length=10)

def __str__(self):
return self.name + " " + self.medal

위와같이 verbose_name 을 모델 필드에 추가하면, 아래처럼 어드민에 “러너이름” 이라고 표시가 됩니다.