2016-11-18 2 views
0

'DELETE .../id/delete'를 요청하면 DRF가 404 응답을 찾을 수 없습니다.DELETE에서 DRF가 404를 찾지 못함

내 모델의 일부와 함께 성공적인 API를 가지고 있지만이 오류는 다른 부분에서 발생합니다.

차이점을 볼 수 없으며 디버깅 방법을 모르겠습니다.

url.py :

url(
     regex=r'^thirdparties/(?P<pk>[0-9]+)/delete/', 
     view=ThirdPartyDestroyAPIView.as_view(), 
     name='thirdparties_delete' 
    ), 

view.py :

@python_2_unicode_compatible 
class ThirdPartyDestroyAPIView(LoginRequiredMixin, PermissionRequiredMixin, CurrentUserThirdPartiesMixin, DestroyAPIView): 
    serializer_class = ThirdPartyReadSerializer 
    permission_required = 'cashflows.delete_thirdparty' 
    raise_exception = True 

내 요청 :

DELETE /api/v1/thirdparties/5/delete/ 

내 대답 :

django_1 | 172.18.0.1 - - [18/Nov/2016 16:02:11] "DELETE /api/v1/thirdparties/5/delete/ HTTP/1.1" 404 - 
,536,

편집 1

이것은 get_queryset() 메소드에서 가져옵니다.

def get_queryset(self):   
     user = self.request.user 
     if user: 
      if 'category_id' in self.kwargs: 
       return ThirdParty.objects.filter(categories__in=self.kwargs['category_id']) 
      elif 'sheet_id' in self.kwargs: 
       third_parties = ThirdParty.objects.filter(categories__sheet__in=self.kwargs['sheet_id']) 
       third_parties = list(set(third_parties)) 
       return third_parties 
      else: 
       third_parties = ThirdParty.objects.filter(categories__sheet__in=Sheet.objects.filter(user=user)) 
       third_parties = list(set(third_parties)) 
       return third_parties 
     else: 
      return None 

내가 그것을 변경할 때 : : 내 방법은 믹스 인에

def get_queryset(self): 
     return ThirdParty.objects.all() 

그것은 작동!

+2

. 또한, 전체 관점입니까? 삭제할 특정'ThirdParty'를 얻으려면'get_object' 함수가 있어야합니다. 현재이보기에는 삭제할 내용이 없습니다. – jape

+0

@jape URL의 'pk'인수가 일반보기 'DestroyAPIView'로 전달되도록 의도 된 것 같지 않습니까? – bixente57

답변

0

정확히 이유는 모르겠지만 문제는 쿼리 세트에있었습니다.

이 OK입니다 :

return ThirdParty.objects.filter(categories__sheet__in=self.kwargs['sheet_id']).distinct() 

이 확인되지 않습니다 : 당신은보기에`@의 python_2_unicode_compatible` 데코레이터가 필요하지 않습니다

third_parties = ThirdParty.objects.filter(categories__sheet__in=self.kwargs['sheet_id']) 
return third_parties = list(set(third_parties))