2016-02-04 3 views
0

J'ai ce modèle sérialiseur:Filtre imbriqué sérialiseur django-cadre reste

class QuoteTemplateSerializer(serializers.ModelSerializer): 
    user = serializers.PrimaryKeyRelatedField(read_only=True) 
    quote = QuoteSerializer() 
    language_list = serializers.SerializerMethodField() 

    class Meta: 
     model = QuoteTemplate 
     fields = ('id', 'user', 'quote', 'language_list') 

Et vues:

class QuoteViewSet(ModelViewSet): 
    model = q.Quote 
    serializer_class = serializers.QuoteSerializer 
    permission_classes = [ 
     GallantViewSetPermissions 
    ] 

    def get_queryset(self): 
     return self.model.objects.filter(client__isnull=False) 



class QuoteTemplateViewSet(ModelViewSet): 
    model = q.QuoteTemplate 
    serializer_class = serializers.QuoteTemplateSerializer 
    permission_classes = [ 
     GallantViewSetPermissions 
    ] 

    def get_queryset(self): 
     return self.model.objects 

Je veux la liste Modèle de devis et le modèle QuoteTemplate. Toutefois, lors de l'affichage du modèle de devis, je souhaite ignorer les enregistrements qui n'ont pas de client et lors de l'affichage du modèle QuoteTemplate, je ne souhaite pas filtrer. Comment puis-je y parvenir avec mes vues actuelles?

À l'heure actuelle, mes listes sont filtrées dans les deux cas.

Edit:

Je l'ai déjà essayé d'utiliser serializers.SerializerMethodField() mais j'obtiens des erreurs sur mon create() et mise à jour() fonctions en essayant de pop informations sur validated_data.

+0

Le code est correct, ce n'est pas clair ce que 'all_for (self.request.user)' fait peut-être la cause de ce comportement. – Ramast

+0

Je veux juste que le filtre soit ignoré lorsqu'il est utilisé comme imbriqué. –

+0

Peut-être que cela expliquerait mieux si vous avez fourni les modèles. Vous ne fournissez que ModelSerializer et deux ViewSet – Ramast

Répondre

0

Vous devez vérifier les retours de vos jeux de vues. Êtes-vous certain que q.Quote.objects.all_for(self.request.user).filter(client__isnull=False) et q.QuoteTemplate.objects.all_for(self.request.user) renvoient les bons querysets? Il n'y a pas de logique dans votre sérialiseur, il ne fait que sérialiser les valeurs dans le jeu de requête.

+0

Merci pour votre réponse djq, la réponse est bien la seule chose dont j'ai besoin est Quote être filtré par le client lorsqu'il est appelé par QuoteViewSet et non filtré par le client lorsqu'il est appelé par QuoteTemplateViewSet. –

+0

Je ne pense pas que votre réponse soit bonne. Basé sur ce commentaire, votre 'QuoteTemplateViewSet' devrait retourner un quryset' self.model.objects.all() 'et ne pas filtrer en utilisant l'utilisateur – djq

+0

Mon développement est Sass donc chaque utilisateur a ses propres citations c'est pourquoi le all_for(). –