2017-05-11 7 views
1

필터링과 AllValuesFilter은 "모든"필터 옵션을 추가 대다 필드와 LinkWidget를 통해이 표시, 난과 등의 All 필터 옵션을하지 않는 장고 관리 list_filter.장고 - 필터 :상의 <code>AllValuesFilter</code>으로 <a href="https://github.com/carltongibson/django-filter" rel="nofollow noreferrer">django-filter</a>와 LinkWidget

:

내가 Add Any & None Handling to ChoiceFilter (and subclasses) 및 기타 다양한 관련 문제를 발견했습니다,하지만 난 솔루션을 얻을하지 않습니다 ...이 특정한 경우

, 나는 장고 WagtailPage 모델 카테고리를 필터링하고있어

# models.py 

# wagtail imports 
# ... 
# modelcluster imports, eg. 
# from modelcluster.fields import ParentalKey, ParentalManyToManyField 

class CategoryRegion(models.Model): 
    title = models.CharField(max_length=200,) 

class NewsPage(Page): 
    categories_region = ParentalManyToManyField(
     "core.CategoryRegion", 
     blank=True, 
    ) 

-

# filters.py 

import django_filters 
from django_filters.widgets import LinkWidget 

class NewsFilter(django_filters.FilterSet): 

    categories_region = django_filters.AllValuesFilter(
     name="categories_region__title", 
     label="Categories: Region", 
     widget=LinkWidget(), 
    ) 

    class Meta: 
     model = NewsPage 
     fields = ['categories_region',] 

어떤 힌트가?

+0

나는 평범한'ManyToManyField'보다는'ParentalManyToManyField'를 사용하여 새로운 (비 할미새) 프로젝트에이를 복제하려고 좋을 것. Modelcluster의 필드 유형은 애매하고 완전히 안정되지 않은 Django 내부 구조에 의존하기 때문에 Modelcluster의 단점을 비난 할 것인지, 아니면 이것이 순수한'장고 필터 (django-filter) '문제인지 여부를 판단하는 데 도움이 될 것입니다. ,하지만 잘하면 다른 사람이 ...) – gasman

+0

좋아, 나는 그것을 시도합니다. 흥미롭게도이 페이지 모델에서'ModelAdmin'을 연결하고'categories_region'을'list_filter'로 설정하면이'ModelAdmin'에'All' 옵션이 생깁니다. – tombreit

답변

2

bug 여기에 AllValuesFilter에는 모두/모든 옵션이 없습니다. #680은 문제를 해결해야하지만 현재 병합되지 않습니다. 그 동안 PR을위한 관련 브랜치를 설치하거나 "All"옵션을 추가하는 커스텀 서브 클래스를 생성 할 수 있어야합니다. 뭔가 같이 :

class ActuallyAllValuesFilter(django_filters.AllValuesFilter): 

    @property 
    def field(self): 
     f = super(ActuallyAllValuesFilter, self).field 
     f.choices = [('', 'All')] + f.choices 
     return f