2016-06-08 3 views
0

내 필터가 작동하지 않습니다. 언제든지 http://localhost:8080/payables/invoices/?status=NOT_PAID에 액세스하면 모든 인보이스가 반환됩니다. 런타임 오류가 없습니다. 입력 한 매개 변수는 무시됩니다. 나는 정말로 이해하지 못한다. 그것 이외에는 잘 작동한다.장고 필터가 작동하지 않습니다.

views.py

class InvoiceViewSet(viewsets.ViewSet): 
    serializer_class = InvoiceSerializer 
    filter_backend = filters.DjangoFilterBackend 
    filter_fields = ('status','supplier',) 

    def list(self,request,): 
     queryset = Invoice.objects.filter() 
     serializer = InvoiceSerializer(queryset, many=True) 
     return Response(serializer.data) 

    def retrieve(self, request, pk=None): 
     queryset = Invoice.objects.filter() 
     invoice = get_object_or_404(queryset, pk=pk) 
     serializer = InvoiceSerializer(invoice) 
     return Response(serializer.data) 

class InvoiceItemViewSet(viewsets.ViewSet): 

    serializer_class = InvoiceItemSerializer 

    def list(self,request,invoice_pk=None): 
     queryset = InvoiceItem.objects.filter(invoice=invoice_pk) 
     serializer = InvoiceItemSerializer(queryset,many=True) 
     return Response(serializer.data) 


    def retrieve(self,request,pk,invoice_pk): 
     queryset = InvoiceItem.objects.filter(pk=pk,invoice=invoice_pk) 
     invoice_item = get_object_or_404(queryset,pk=pk) 
     serializer = InvoiceItemSerializer(invoice_item) 
     return Response(serializer.data) 

url.py 명시 적으로 따라서 필터 백엔드가 사용되지 않는 한 다음의 검색어와 만드는 때문이다

from django.conf.urls import url, include 
#viewset 
from rest_framework_nested import routers 
from payables.views import InvoiceViewSet,InvoiceItemViewSet 

router = routers.SimpleRouter() 
router.register(r'invoices', InvoiceViewSet,base_name='invoices') 

invoice_item_router = routers.NestedSimpleRouter(router,r'invoices',lookup='invoice') 
invoice_item_router.register(r'items', InvoiceItemViewSet, base_name='invoice_items') 

urlpatterns = [ 
    url(r'^',include(router.urls)), 
    url(r'^',include(invoice_item_router.urls)) 
    ] 

답변

1

:

queryset = Invoice.objects.filter() 

나는 sugges t를 보지 않는다. ModelViewSet. 이 경우 뷰 수준에서 queryset을 전달하면 나머지는 처리됩니다. 대신 queryset = Invoice.objects.filter()

사용 queryset = self.get_queryset()

self.get_queryset()

+0

안녕을 반환? InvoiceViewSet 내부의 목록 함수에 다른 인수를 추가해야합니까? 예를 들어 def list (self, request, queryset) :? –

+0

'ModelViewSet'을 사용하고 있습니까? 그렇다면 문서를 따라 쿼리 세트를 어떻게 선언하는지 볼 수 있습니다. – AKS

+1

알았어, 박사님, 고마워요! –

1

, 어떻게 내가 "보기 수준"에의 검색어 제대로 전달하지 필터링 된 개체 목록

관련 문제