2017-12-04 14 views
1

"Registro_Entrada"를 모두 가져 와서 "fk_tipo_entrante"가 "2"일 때 "Entrante"로 필터링하고 싶습니다.django rest framework 중첩 필터

VIEWS.py에

내가 가진 :

SERIALIZERS.py에
class GetPersonalEntranteRegistro_EntradaAPIView(generics.ListAPIView): 
    serializer_class = Registro_EntradaNestedSerializer 
    def get_queryset(self): 
     entrante = Entrante.objects.all().filter(fk_tipo_entrante=2) 
     registro = Registro_Entrada.objects.filter(fk_entrante = entrante.pk) 
     return registro 

내가 가진 : MODELS.py에

class Registro_EntradaNestedSerializer(serializers.ModelSerializer): 
    fk_tarifa = TarifaSerializer(many=False) 
    fk_entrante = EntranteNestedSerializer(many=False) 
    class Meta: 
     model = Registro_Entrada 
     fields = ('_all_') 

내가 가진 :

class Entrante(models.Model): 
    fk_credencial = models.ForeignKey(Credencial,related_name='credencial_entrada',on_delete=models.CASCADE) 
    fk_placa = models.ForeignKey(Placa, related_name='credencial_placa',on_delete=models.CASCADE) 
    fk_tipo_entrante = models.ForeignKey(Tipo_Entrante,related_name='entrante_tipo',on_delete=models.CASCADE) 
    fk_persona = models.ForeignKey(Persona,related_name='entrante_persona',on_delete=models.CASCADE) 
    estatus = models.IntegerField(default=1) 

class Registro_Entrada(models.Model): 
    fecha_entrada = models.DateTimeField(auto_now_add=True) 
    fecha_salida = models.DateTimeField(null=True) 
    fk_tarifa = models.ForeignKey(Tarifa,related_name='registro_tarifa',on_delete=models.CASCADE) 
    fk_entrante = models.ForeignKey(Entrante,related_name='regitro_entrante',on_delete=models.CASCADE) 
    costo = models.DecimalField(decimal_places=2, max_digits=50) 
    saldo = models.DecimalField(decimal_places=2,max_digits=50) 
    estatus = models.IntegerField(default=1) 

그것은 다음을 보여줍니다 오류 :

'QuerySet' object has no attribute 'pk'

+0

'entrante = Entrante.objects.all(). filter (fk_tipo_entrante = 2) .first()' –

답변

0

당신이 먼저 pk없이 사용 __in을 시도 할 수 쿼리 많은 pk 형태로 필터링해야하는 경우 :

entrante = Entrante.objects.filter(fk_tipo_entrante=2) 
registro = Registro_Entrada.objects.filter(fk_entrante__in=entrante) 
#             ^^^^  ^^^ 

더 자세한 django in을 읽을

0

당신은 아마 여기에 문제가있다 :

def get_queryset(self): 
    entrante = Entrante.objects.all().filter(fk_tipo_entrante=2) 
    registro = Registro_Entrada.objects.filter(fk_entrante = entrante.pk) # this line 

entrante이 검색어 세트입니다. 그래서 pk 속성이 없습니다. 그래서 당신은 다음과 같이 시도 할 수 있습니다 :

def get_queryset(self): 
    entrante = Entrante.objects.all().filter(fk_tipo_entrante=2) 
    if entrante.exists(): 
     _entrante = entrante.first() # Or you can use `.get()` method of django queryset 
     registro = Registro_Entrada.objects.filter(fk_entrante = _entrante.pk) 
    else: 
     registro = Registro_Entrada.objects.none() # Or .all() , or any logic you want 
+0

오류 표시가 중지되었지만 객체를 가져 오지 않았으므로 Bear Brown의 대답이 나에게 도움이되었습니다. – Kebit