2017-01-24 2 views
0

방금 ​​DRF에서 코딩을 시작했고 관련 외래 키에서 검색해야하는 문제가 발생했습니다.Django Rest Framework 관련 필드 필터링

저는 BookDetails와 BookCopies의 두 가지 모델이 있습니다.

BookCopies에는 북 키로 참조되는 BookDetails가 있습니다.

이제 BookCeties 모델의 BookDetails 속성 제목을 사용하여 BookCopies를 검색하고 싶습니다.

다음과 같이 django_rest_framework_filters를 사용했지만 http://localhost:8000/book/copy/?book_details__title=abc을 방문하면 오류가 발생합니다.

class BookFilter(FilterSet): 
    class Meta: 
     model = BookDetail 
     fields = { 
      'title': ['exact', 'in', 'startswith'], 
      'author': ['exact', 'in', 'startswith'], 
      'editor': ['exact', 'in', 'startswith'], 
      'publisher': ['exact', 'in', 'startswith'], 
      'cl_num': ['exact', 'in', 'startswith'] 
     } 


class CopyFilter(FilterSet): 
    book_details = RelatedFilter(BookFilter, name="title", queryset=BookDetail.objects.all()) 

    class Meta: 
     model = BookCopy 
     fields = { 
      'ref_id': ['exact', 'in', 'startswith'] 
     } 

보기

class CopyListAPIView(ListAPIView): 
    serializer_class = CopyViewSerializer 
    queryset = BookCopy.active_objects.all() 
    filter_backends = [DjangoFilterBackend] 
    filter_class = CopyFilter 

시리얼

class CopyViewSerializer(ModelSerializer): 
    class Meta: 
     model = BookCopy 
     fields = "__all__" 

KeyError at /book/copy/ 
'book_details__title' 
Request Method: GET 
Request URL: http://localhost:8000/book/copy/?book_details__title=abc 
Django Version: 1.10.5 
Exception Type: KeyError 
Exception Value:  
'book_details__title' 
Exception Location: /Applications/MAMP/htdocs/python/01-virtual-env/lib/python2.7/site-packages/django_filters/filterset.py in qs, line 335 
Python Executable: /Applications/MAMP/htdocs/python/01-virtual-env/bin/python 
Python Version: 2.7.10 
Python Path:  
['/Applications/MAMP/htdocs/library-new/services', 
'/Applications/MAMP/htdocs/python/01-virtual-env/lib/python27.zip', 
'/Applications/MAMP/htdocs/python/01-virtual-env/lib/python2.7', 
'/Applications/MAMP/htdocs/python/01-virtual-env/lib/python2.7/plat-darwin', 
'/Applications/MAMP/htdocs/python/01-virtual-env/lib/python2.7/plat-mac', 
'/Applications/MAMP/htdocs/python/01-virtual-env/lib/python2.7/plat-mac/lib-scriptpackages', 
'/Applications/MAMP/htdocs/python/01-virtual-env/lib/python2.7/lib-tk', 
'/Applications/MAMP/htdocs/python/01-virtual-env/lib/python2.7/lib-old', 
'/Applications/MAMP/htdocs/python/01-virtual-env/lib/python2.7/lib-dynload', 
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7', 
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin', 
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk', 
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac', 
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages', 
'/Applications/MAMP/htdocs/python/01-virtual-env/lib/python2.7/site-packages', 
'/Applications/MAMP/htdocs/python/01-virtual-env/lib/python2.7/site-packages/Django-1.10.5-py2.7.egg', 
'/Applications/MAMP/htdocs/python/01-virtual-env/lib/python2.7/site-packages/MySQL_python-1.2.5-py2.7-macosx-10.12-intel.egg'] 
Server time: Tue, 24 Jan 2017 13:35:36 +0000 

이 제발 도와주세요 오류 추적. 고맙습니다.

+0

오류 추적을 게시 할 수 있습니까? – Fian

+0

또한 사용중인보기도 제공 하시겠습니까? – Linovia

+0

안녕하세요, 정말 죄송합니다. 답장을 좀 늦게 보내 셨습니다. 내가 추적을 사용하여 오류 추적 및 질문을 업데이 트 –

답변

0

원하는 동작을 얻으려면 name 인수를 related_name과 동일하게 모델에 제공해야합니다. 기본적으로 FilterSet의 필드 이름과 동일합니다. 따라서 book_details 인 경우 건너 뛸 수 있습니다.

class CopyFilter(FilterSet): 
    book_details = RelatedFilter(BookFilter, name="book_details", queryset=BookDetail.objects.all() 

그런데 오류 스택에는 스택이 없습니다.

+0

나는 그것을 시도했다. 일하지 않았어. 같은 문제. 나는 이것을보기에 의지했다. def get_queryset (self) : 원하는대로 사용자 정의 필터링을 수행하는 데 사용했습니다. –

관련 문제