2017-10-23 6 views
1

장고 필터 LinkWidget을 통해 장고 wagtail 색인 페이지의 게시물 필터링에 django-filter을 사용하고 있습니다. 그게 정상적으로, 장고 관리 인터페이스에서 list_filter와 마찬가지로 작동합니다.기존 필터에 OrderingFilter를 추가하고 링크로 렌더링하는 방법

이제 일부 기준에 따라 쿼리 세트를 정렬/정렬하는 기능을 공개하고 싶습니다. Django 필터는 OrderingFilter (ref)을 제공하지만이 필터를 구현하고 LinkWidget과 같은 렌더링을 수행하는 방법을 모르겠습니다.

내 현재의 접근 방식 :

# template.html 
<ul> 
{% for choice in filter_ordering.field.choices %} 
    <li>{{ choice }}</li> 
{% endfor %} 
</ul> 

# filters.py 
class PostFilter(django_filters.FilterSet): 

    categories = PatchedAllValuesFilter(
     name="categories__slug", 
     label="Categories", 
     widget=LinkWidget(), 
     choice_name="categories__name", 
    ) 

    ordering = django_filters.OrderingFilter(
     widget=LinkWidget, 
     fields=(
      ('title', 'title') 
     ) 
    ) 

    class Meta: 
     model = PostPage 
     fields = ['categories'] 

# views.py 
from .models import PostPage 
from .filters import PostFilter 

filter = PostFilter(request.GET, queryset=all_posts) 
filter_ordering = PostFilter(request.GET, queryset=all_posts).filters['ordering'] 

context = self.get_context(request) 
context['filter'] = filter 
context['filter_ordering'] = filter_ordering 

return render(request, self.template, context, *args, **kwargs) 

...하지만이 작동하지 않습니다. 내 OrderingFilter에서 뭔가를받을 수 있나요 :

('', '---------') 
('title', <django.utils.functional.lazy.<locals>.__proxy__ object at 0x7f0d3e021cc0>) 
('-title', 'Title (descending)') 

... 어떻게 내 템플릿에 링크로이 렌더링하는 방법? 어떤 도움 당신은 그냥 평소와 같이 양식 필드를 렌더링 할 필요가

답변

0

에 대한 감사

.

(가) 위 아래의 HTML 생성
from django_filters import FilterSet, filters, widgets 
from tests import models 

class F(FilterSet): 
    o = filters.OrderingFilter(fields=['id', 'name'], widget=widgets.LinkWidget) 

    class Meta: 
     model = models.Article 
     fields = [] 

print(F().form['o']) 

, 예를 들어 장고 필터의 자체 테스트 모델을 사용 :

<ul id="id_o"> 
    <li><a class="selected" href="?o=">All</a></li> 
    <li><a href="?o=id">Id</a></li> 
    <li><a href="?o=-id">Id (descending)</a></li> 
    <li><a href="?o=name">Name</a></li> 
    <li><a href="?o=-name">Name (descending)</a></li> 
</ul> 
+0

감사합니다, 바로 그거야! 완벽을 기하기 위해 장고 템플릿 스 니펫을 다음과 같이 작성했습니다. {{% for filter.form.ordering %} {{order_by}} {% endfor %}' – tombreit