2017-09-28 4 views
2

Par défaut, RetrieveAPIView ou RetrieveUpdateAPIView nécessite lookup_field pour récupérer le modèle.RetrieveAPIView sans champ de recherche?

Cependant dans mon cas, je veux récupérer mon modèle par self.request.user.

Voici exemple views.py

class ProfileRetrieveAndUpdateProfile(generics.RetrieveUpdateAPIView): 
    queryset = Profile.objects.all() 
    serializer_class = ProfileRetrieveAndUpdateSerializer 
    lookup_field = 'user_id' 

    def get_queryset(self): 
     qs = Profile.objects.all() 
     logged_in_user_profile = qs.filter(user=self.request.user) 
     return logged_in_user_profile 

Puis-je utiliser RetrieveAPIView sans lookup_field?

+0

où vous trouvez que 'lookup_field' est nécessaire? Je ne l'ai pas trouvé dans les docs, et ça a marché sur mon projet. –

+0

cet attr a la valeur par défaut dans 'GenericAPIView' et il est utilisé pour obtenir l'objet. –

+0

Je reçois cette erreur si je ne spécifie pas 'lookup_field': Affichage attendu ProfilePageView à appeler avec un argument de mot clé URL nommé" pk ". Corrigez votre URL conf, ou définissez correctement l'attribut '.lookup_field' sur la vue. –

Répondre

3

Vous devez passer outre get_object

def get_object(self): 
    queryset = self.get_queryset() 
    obj = get_object_or_404(queryset, user=self.request.user) 
    return obj 
+0

MERVEILLEUX !!!!!!! –

+0

MERCI BEAUCOUP X 1 000 000 000 –

+0

heureux de vous aider!) –