[javascript] 더 나은 Django 관리자 ManyToMany 필드 위젯

Django Admin의 기본 models.ManyToManyField위젯이 사용하기 번거 롭다는 것을 알았습니다 . 그것은의 HTML을 선택 요소는 “다른”모델의 객체의 많은 경우 그것은 실제로 “다른 하나는”당신이 “이”개체와 연결할 개체 찾기 위해 매우 비현실적이다. 그리고 “기타”모델의 개체가 많은 경우 관리 페이지의 렌더링 속도를 늦추는 것 같습니다.

나만의 사용자 지정 관리 위젯을 빌드하고 ManyToManyFields적절하다고 판단 되는대로 적용 할 수 있다는 것을 알고 있지만 대신 사용할 수있는 미리 빌드 된 위젯 이 있습니까? 꿈에서 나는 자동 완성 텍스트 입력 HTML 위젯을 상상합니다. Django 관리 프레임 워크에서 이것이 실용적 / 가능합니까?

감사.



답변

filter_horizontal관리자 클래스 의 속성을 사용해보십시오 . 예를 들면 다음과 같습니다.

class SomeModelAdmin(admin.ModelAdmin):
    filter_horizontal = ('users',)

문서 에서 언급했듯이 “이 목록에 ManyToManyField를 추가하면 옵션 내에서 검색 할 수있는 멋지고 눈에 잘 띄지 않는 JavaScript”필터 “인터페이스가 대신 사용됩니다”. filter_vertical약간 다른 레이아웃으로 동일한 작업을 수행합니다.


답변

관리자에서 원시 ID를 사용해 볼 수 있습니다. 및 django 문서 :
http://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.raw_id_fields

자동 완성 기능으로 무언가를 찾고 있다면 이것을 시작점으로 보는 것이 좋습니다 http://code.djangoproject.com/wiki/AutoCompleteSolutions

마지막으로 매우 단순한 인라인 예제 :

models.py

class SomeModel(models.Model):
    users = models.ManyToMany(User)

admin.py :

class SomeModelAdmin(admin.ModelAdmin):
    raw_id_fields = ("users",)


답변

나는 실제로 그것을 가지고 놀지 않았지만 다른 곳에서 참조하는 이 유망한 라이브러리를 발견 했습니다 .

내가 원하는 것을 정확히하는 것 같습니다. 관련 개체의 전체 목록을로드하고 (수에 관계없이!) 일부를 선택할 수있는 선택기를 filter_horizontal제공하는 대신 검색 / 필터 상자를 제공하고 자동 완성 / 자동 완성 호출을 사용하여 결과를 검색합니다. 동적으로. 이는 5000 명의 사용자가 있고 5k <option>요소가 다운로드 및 렌더링 될 때까지 기다리지 않고 3-4 명을 선택하려는 경우에 유용 합니다.


답변

이것은 오래된 질문이지만 여기에 저처럼 이것을 찾는 사람들을 위해 여기에 대답을 추가하고 싶습니다.이 상황은 Django 인라인 관리자가 정확히 무엇을위한 것입니다. 특히, 선택 항목이 너무 많은 다 대다 관계에 대해 원시 ID 필드와 함께 TabularInlines를 사용합니다.

https://docs.djangoproject.com/en/2.1/ref/contrib/admin/#django.contrib.admin.TabularInline


답변