2014-11-28 1 views
3

장고 필터 사용 "필드에 키워드 '이름'을 확인할 수 없습니다", 나는 다음과 같은 FilterSet을 가지고 : 당신이 볼 수 있듯이장고 필터 order_by

class MyFilter(django_filters.FilterSet): 
    name = django_filters.CharFilter(name='full_name') 

    class Meta: 
     model = MyModel 
     fields = ['name',] 
     order_by_field = 'order' 
     order_by = ('name',) 

, 나는 full_name에 필드를 명명 한 그래서 필터 테이블의 full_name 열에.

Cannot resolve keyword 'name' into field. Choices are: ...

그것은 ?name=Jon%20Doe와 필터하지만 순서가 작동하지 않습니다 내가 nameorder_by을 설정하지만 일단 그것은 나에게 오류를 제공합니다. 무엇이 문제 일 수 있습니까?

답변

1

Meta.order_by의 설명서에 따르면 필터 필드 이름이 아닌 모델의 필드 이름을 사용해야합니다. 당신은 코드를 살펴있는 경우

class MyFilter(django_filters.FilterSet): 
    name = django_filters.CharFilter(name='full_name') 

    class Meta: 
     model = MyModel 
     fields = ['name',] 
     order_by_field = 'order' 
     order_by = ('full_name',) 

가 : https://github.com/alex/django-filter/blob/develop/django_filters/filterset.py#L326-L339을, 당신은 당신이 order_by 필드를 선언 한 경우, 그것은을 통해 루프 것을 볼 수 있습니다 귀하의 경우에, 난 그냥 모델에 full_name를 사용합니다 양식 필드 (모델에서 생성됨)를 가져온 다음 해당 값을 QuerySet의 order_by에 대한 인수로 사용합니다.

어떤 것이 든이 문서는이 사실에 대해 더 분명해야합니다.

+1

명시 적으로 ** 모델 ** 입력란이어야한다는 내용이 표시되지 않습니다. 'order_by는 필드 이름의리스트 또는 튜플이 될 수 있습니다. ' [name] (https://django-filter.readthedocs.org/en/latest/ref/filters.html#name)을 참조하십시오. – norbertpy

+0

@norbertpy - 제 답변이 맞습니다. 나는 그것을 설명으로 업데이트했다. 테스트 한 것처럼 print 문을 던져서 디버깅을 통해 결과를 확인하십시오. –

+0

설명해 주셔서 감사합니다. 맞습니다. 그러나 한 가지 질문입니다. 쿼리 문자열 매개 변수를 순서에 어떻게 매핑합니까? 내 쿼리 문자열에'? order = name'을 쓰고 대신 모델의'full_name' 열에 순서를 매기기를 원합니다. 어떻게해야합니까? – norbertpy