Django - ForeignKey display text 변경하기

Django - ForeignKey display text 
변경하기
Photo by The HK Photo Company / Unsplash

modelforms 에서 자동으로 값을 가져오긴 하는데 __str__ 에 정의된 글자나 키 값을 기본으로 보여준다. 부가적으로 정보를 더 보여주고 싶은데 __str__ 을 바꾸면 전체에 이 모델을 접근하는 부분이 다 바뀌므로, 딱 combo에 올라가는 글자만 변경하고 싶다면,

label_from_instance 속성을 건드리면 된다.

자세한 설명은 아래 링크를 참고해 보시고,
How to change ForeignKey display text in the Django Admin?

예제 코드를 살펴보면,

subform.fields["product_profile"].queryset = get_user_productprofile(companyid=_companyid, is_superuser=_superuser).order_by("name")
subform.fields["product_profile"].label_from_instance = lambda obj: "%s(%s)" % (obj.name, obj.product.name)

queryset 을 통해 필터링 결과를 넣어 줄 수 있고

label_from_instance 통해 display text 를 변경할 수 있다. 예제에서 필드명(상품명) 상태로 보이도록 수정한 버전이다.

참고 사이트

  • 람다 lambda 를 사용하고 있는데, 관련 기초 정보는 여기를 가보세요.
3.5 람다(lambda)
오늘은 람다 형식과 그것을 이용하는 여러 가지 함수들에 대해서 알아보겠습니다. 당장 완벽하게 소화하실 필요는 없을 것 같구요, 가벼운 마음으로 이런 것이 있다는 정도만 아셔 ...