[Django] verbose_name과 related_name

Youngshin Park·2024년 9월 20일
1

Django

목록 보기
2/3
post-thumbnail

두둥 !
다시 왔어요. 저번에 또 처음 알게 된 것을 소개해드리고 싶어서 왔습니댜 ㅎㅎ

참 배움에는 끝이 없어요 그쵸? 😂


verbose_name

어찌 저는 이걸 올해 처음 접하게 되었을까요 .. 그동안 왜 본 적이 없죠 !!

💡 verbose_name 이란?
Django 모델 > 필드에서 "사람이 읽을 수 있는 이름(라벨)"을 지정하는 옵션. 기본적으로 필드 이름은 코드에서 사용하는 '변수명'이지만, verbose_name을 설정하면 '관리자 페이지나 폼에서 그 필드를 이해하기 쉽게 표시'할 수 있음.

음 뭔 소리지? 하면서 봤었다. 그래서 일단 적용해보고 차이를 파악하자! 했었다.

예를 들어 보자!!

class Booth(models.Model):
    OPERATED_STATUS = [
        ('운영 중', '운영 중'),
        ('운영 전', '운영 전'),
        ('운영 마감', '운영 마감'),
    ]

    id = models.AutoField(primary_key=True)
    event = models.ForeignKey(Event, on_delete=models.CASCADE, related_name="booths") 
    name = models.CharField(max_length=100, verbose_name="부스명")
    description = models.TextField(verbose_name="부스 설명")
    location = models.CharField(max_length=255, verbose_name="부스 위치")
    is_operated = models.CharField(max_length=10, choices=OPERATED_STATUS, verbose_name="운영 여부")
    open_time = models.DateTimeField(verbose_name="시작 시간")
    close_time = models.DateTimeField(verbose_name="마감 시간")

위의 코드에서 각각마다 verbose_name을 부여하였다.

위는 어드민 화면이다.

자자 차이가 보이는가?
위 사진을 보면 event는 영어(필드명 자체)고 나머지는 한글이다.

자 이제 다시 코드를 봐봐라. event 필드에는 verbose_name이 설정되어 있지 않다. 그래서 그냥 필드명 그 자체로 표시가 되는 것이다!

오호라.. 한국인이니까 한국어가 더 편할 수도 있다!
그럴 때면 사용하기 좋을 것 같다 !!!

왕추 강추 !!!!


두둥 두 번째 개념이다.
verbose_name이랑 뭐가 다를까?
사실 related_name은 장고 처음부터 많이 써왔던 것들이다 ㅎㅎ
그래서 verbose_name보다 매우 익숙하다. 근데 이참에 한 번 공부를 해보았다 간단하게지만^^

💡 related_name 이란?
Django에서 ForeignKey나 OneToOneField, ManyToManyField와 같은 관계 필드를 설정할 때, 역참조할 때 사용할 이름을 지정하는 옵션!

잘 모르겠다고요 !?
예시를 봅시다 !!

class Booth(models.Model):
    name = models.CharField(max_length=100)

class BoothMenu(models.Model):
    booth = models.ForeignKey(Booth, on_delete=models.CASCADE)
    name = models.CharField(max_length=100)

위에서 Booth 모델은 여러개의 BoothMenu와 연결될 수 있는 관계임 !
근데 여기서, Booth 모델에서 BoothMenu를 역참조하려면 boothmenu_set을 사용해야 함(모델명필드명)

즉, 아래와 같이 써야 함.

booth = Booth.objects.get(id=1)
menus = booth.boothmenu_set.all()

함 써보자 !!

class Booth(models.Model):
    name = models.CharField(max_length=100)

class BoothMenu(models.Model):
    booth = models.ForeignKey(Booth, on_delete=models.CASCADE, related_name='menus')
    name = models.CharField(max_length=100)

위와 같이 related_name='menus' 라고 작성해준다.

역참조할 때 'menus'를 사용하겠다는 뜻이고 이걸 이용해서 서로 와리가리 쓸 수 있는 것이다.

이때 아래와 같이 쓰면 된다.

booth = Booth.objects.get(id=1)
menus = booth.menus.all()

뭐야!? 코드 줄 수는 같은 거 아냐?!
할 수도 있지만 더 많은 개발을 하다보면 .. related_name의 편리성을 느끼게 될 것이다 💗


후후 오늘은 여기까지 ...

앞으로 더 많이 가져오겠다 우가우가

개발팅 ⭐️

0개의 댓글