22.11.15 16:27 작성
·
310
0
안녕하세요 선생님!!
장고폼으로 모델 인스턴스 생성할때
외래키의 값을 입력할때는 디폴트 widget이 select widget 이자나요??
근데 외래키의 값이 너무많으면 select widget의 크기가 무한정으로 길어질것같아서 그닥 좋지 않을 것같은데 혹시 다른 좋은 방법이 있을까요?
그냥 widget을 textinput을 바꾸니 pk값을 직접 입력해야해서 좀 불편하더라고 (물론 view에서 로직 처리하는 구현도 하려했는데 실패 ㅠㅠㅠ)
그래서 처음에 생각한게 autocomplete인데 잘 안되더라고요 ㅠㅠ;;;
보통 일반적으로 장고 폼을 사용할 때 외래키 입력 widget을 어떠한 방식으로 하는게 과연 좋을까요?? 그냥 select widget을 쓰나용!??
답변 1
0
2022. 11. 15. 16:49
안녕하세요.
말씀하신 대로 models.ForeignKey 필드에 대한 디폴트 폼 위젯은 select입니다. 그렇기에 해당 폼 필드를 렌더링할 때, 외래키 관계에 있는 모든 모델을 다 조회해야하죠. 그렇기에 해당 데이터가 많을 경우, 렌더링이 느릴 수 밖에 없습니다.
그런 이유로 autocomplete와 같은 기능을 써서, 검색어에 맞는 데이터만 로딩해서 동적으로 select 박스 option을 꾸미는 방식을 많이 씁니다.
django admin에서도 autocomplete_fields와 같은 옵션을 제공해주기도 하구요. 이는 django admin에서의 기능일 뿐, admin 밖에서는 직접 구현하셔야 합니다.
https://docs.djangoproject.com/en/4.1/ref/contrib/admin/#django.contrib.admin.ModelAdmin.autocomplete_fields
autocomplete를 구현하는 것은 사용하시는 프론트엔드 기술에 의존적입니다. 어떤 방법을 쓰시든, form submit 시에 해당 필드의 외래키값만 서버로 전달할 수 있으면 됩니다.
jQuery를 쓰신다면 select2와 같은 라이브러리가 있을 수 있구요. 리액트/vue/스벨트 등이라면 외부 라이브러리를 쓰거나 직접 해당 컴포넌트를 개발할 수도 있겠죠.
이런 기능 개발을 html/css/js를 통해 하시고나서, 이를 커스텀 Django Widget화 시키신다면, 좀 더 재사용성 높게 autocomplete 기능을 사용하실 수 있습니다.
화이팅입니다. :-)