2015-01-10 2 views
0

테이블 MemberDeclareReceptMember의 데이터를 다음 구성 파일로 가져올 수있었습니다. 여기에서 나는 MemberDeclareRecept.pk을 찾고 있습니다. 대신 Member.CoId을 검색하면 어떻게 모든 데이터를 얻을 수 있습니까? MemberSearchByCode보기는 테이블의 모든 멤버를 제공하지만 특정 멤버를 얻을 수 없습니다. 여기Django REST 프레임 워크 필터링보기

내가 현재 사용하고 내 모델

class Member(models.Model): 
    Name = models.CharField(max_length=40,null=True) 
    FirstName = models.CharField(max_length=40,null=True) 
    DateBirth = models.DateField(,null=True) 
    CoId = models.CharField(max_length=6,null=True) 

class MemberDeclareRecept(models.Model): 
    SyMember=models.ForeignKey(Member,verbose_name='Name member ',null=True,related_name='Member') 
    DateDeclareRecept=models.DateField(('Date received',null=True) 

그리고

class MemberDeclareSerializer(serializers.ModelSerializer): 
    member = serializers.StringRelatedField(read_only=True) 
    SyRecept=serializers.StringRelatedField(read_only=True) 
    class Meta: 
     model = MemberDeclareRecept 
     fields=('id','member','SyRecept') 

사용중인 시리얼 그리고 도면이다

class MemberDeclareDetail(generics.ListCreateAPIView): 
    queryset=MemberDeclareRecep.objects.all() 
    serializer_class =MemberDeclareSerializer 
    def get_object(self,pk): 
     try: 
      return self.queryset.get(pk=pk) 
     except MemberDeclareRecep.DoesNotExist: 
      raise Http404 

    def get(self, request, pk,format=None): 
     entries = self.get_object(pk) 
     serializer = MemberDeclareSerializer(entries) 
     return Response(serializer.data) 

class MemberSearchByCode(generics.ListAPIView): 
    serializer_class =MemberSerializer 
    def get_queryset(self): 
     member=self.request.QUERY_PARAMS.get(Co_id',None) 
     if membre is not None: 
      queryset = queryset.filter(member__Name=member 
     return queryset 
+0

몇 가지 추가 정보 누락 : DRF 버전. 이 목록보기에서 필터를 구현하는 몇 가지 방법이 있습니다. http://www.django-rest-framework.org/api-guide/filtering/#filtering –

+0

안녕 미셸을 참조하십시오. 나는 사용자 REST 3.0 – Okkie13

+0

나는 내 문제를 해결하기 위해이를 발견했습니다 : 클래스 MemberSearch (generics.ListAPIView) : 회원 = self.kwargs [ 'Co_id'] 반환 member_declare_recept : serializer_class = MemberDeclareSerializer 데프 (자신을) get_queryset .objects.filter (member__Co_id = member) 의견이나 제안이 있으십니까? – Okkie13

답변

0

그것은 '당신처럼 나타납니다 답변은 based on the comment이며 아래에 포함되어 있습니다.

class MemberSearch(generics.ListAPIView): 
    serializer_class=MemberDeclareSerializer 

    def get_queryset(self): 
     member = self.kwargs['Co_id'] 

     return member_declare_recept.objects.filter(member__Co_id=member) 

이 URL에 존재하는 매개 변수를 기반으로 필터링되어이 쿼리 매개 변수를 기반으로 검색어 세트를 필터링하지 않는 것이 중요합니다. 당신은 당신이 한 번에 모든 객체의 목록을 얻을 필요가있는 경우에 유용 쿼리 매개 변수를 기반으로 필터링을한다면, 당신이 사용하는 것입니다 URL은 회사 ID를 만들 것

/api/members/?company=[co_id] 

같은 것 선택 과목. 귀하의 경우에는 ID가 URL 자체 내에 포함됩니다. 이것은 일반적으로 referred to as hierarchal urls이며, generally not recommended하지만 URL이 일부 바람직하고, 심지어 어떤 경우에 필요합니다

/api/company/[co_id]/members 

처럼 끝.


필터링을 위해 url 매개 변수 대신 query 매개 변수를 사용하려는 경우 코드에 약간의 변경 만 필요합니다.

class MemberSearch(generics.ListAPIView): 
    serializer_class=MemberDeclareSerializer 

    def get_queryset(self): 
     company_id = self.request.query_parameters.get('company', None) 

     if not company_id: 
      return member_declare_recept.objects.all() 

     return member_declare_recept.objects.filter(member__Co_id=company_id) 

이것은 django-filter and the DjangoFilterBackend을 통해 직접 지원되는 추가 이점이 있습니다.

+0

서식, 문법 및 권장 사항에 대해 감사합니다. 이 기사는 공유하기에 더 좋습니다. – Okkie13

관련 문제