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


101

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

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

감사.

답변:


160

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

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

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


큰! 이것은 내가 찾고있는 것과 똑같이 들린다. 나는 그것을 시도 할 것이다.
Chris W.

작동하지만이 파일을 읽기 전용으로 만드는 방법. 나는 read only_fields = ( 'users',) 시도하고 있습니다. 그러나 쉼표로 구분 된 한 줄로 표시됩니다. 줄 바꿈으로 표시하고 싶습니다 ...
Varnan K

나만의 위젯을 작성해야 할까봐 걱정했는데 이건 완벽 해! 감사합니다! ; P
umat

7

관리자에서 원시 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",)

3

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

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


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.