- Formations
- conversion_path Parcours & Formations
- science Projets
- data_object Exercices de code
- psychology Exercices IA
- quiz Quiz
- Articles
- rss_feed Blog
- sort_by_alpha Glossaire
- menu_book Guides
- help_center FAQ
- media_link Ressources
- Communauté
- groups La communauté
- forum Questions
- live_tv Mentorats
- science Projets mensuels
- Formations
- conversion_path Parcours & Formations
- science Projets
- data_object Exercices de code
- psychology Exercices IA
- quiz Quiz
- Articles
- rss_feed Blog
- sort_by_alpha Glossaire
- menu_book Guides
- help_center FAQ
- media_link Ressources
- Communauté
- groups La communauté
- forum Questions
- live_tv Mentorats
- science Projets mensuels
Deviens membre Premium magic_button
Débloque cette session en devenant Membre Premium 🚀
Inscris-toi
(c'est gratuit !)
Un compte est nécessaire pour participer aux discussions.
Créer un compte personlive_helpToutes les questions
Gabriel Trouvé
10 février 2023 - 10 février 2023 à 15:42
checkConversation résolue
3 réponses
def get_queryset django
Re,Dans ce cas pour filtrer on fait queryset.filter():def get_queryset(self): queryset = super().get_queryset() # requete quand j'actualise la page if self.request.user.is_authenticated: return queryset return queryset.filter(published=True) Si j'avais du le faire tout …
00:00:00 :Actuellement, on a une page d'accueil qui affiche tous les articles du blog, qu'ils soient publiés ou non.Donc si je vais dans les vues, dans views.py ici, on utilise l'attribut modèle et on l'associe à notre blog post.
00:00:12 :Donc par défaut, il va faire en fait comme si on faisait objects.all,donc c'est-à-dire qu'il va récupérer tous les articles de blog de notre base de données.
00:00:19 :Nous, ce qu'on aimerait bien, c'est avoir en fait deux cas de figure.Un cas de figure où l'utilisateur est connecté, donc le super utilisateur que j'ai créé,donc actuellement je suis connecté et donc on aimerait afficher tous les articles pour que je puisse modifier, supprimer, éditer les articles,même s'ils ne sont pas publiés.
00:00:35 :Et on aimerait un autre cas de figure qui est quand on a en fait un visiteur sur notre siteet dans ce cas-ci, on veut afficher uniquement les articles publiés.
00:00:42 :Donc heureusement, on peut bien entendu faire cette modification.Pour ça, on va modifier le query set.Donc le query set, c'est en fait les données qui nous sont retournées par défaut par cette vue, donc par le ListView.
00:00:54 :Donc on va les récupérer et on va les modifier avant de les repasser à notre template HTML.Donc pour ça, on va surcharger la méthode getQuerySet,qui est la méthode qui est appelée automatiquement par ListView pour récupérer les données de notre base de données.
00:01:09 :Donc ce qu'on va faire déjà, c'est utiliser la fonction super pour récupérer le query set existant.Donc on va appeler cette même fonction getQuerySet avec super.
00:01:18 :Donc en fait, c'est comme si on faisait ListView.getQuerySet ici.Donc je vais faire super.getQuerySet et on va récupérer tout ça dans une variante que je vais appeler querySet tout simplement.
00:01:27 :On va ensuite vérifier si l'utilisateur est authentifié sur notre site ou pas.Donc est-ce qu'il est connecté ou non ?On pourrait également vérifier si l'utilisateur a les droits d'administration ou s'il est autorisé à poster des articles.
00:01:39 :Dans ce cas-ci, on n'a pas un module de gestion des utilisateurs très avancé,donc on va juste vérifier si l'utilisateur est connecté.On n'a qu'un seul utilisateur dans ce cas-ci et c'est l'utilisateur d'administration.
00:01:50 :Donc juste le fait qu'il soit connecté, ça va nous confirmer qu'on est bien en présence de l'administrateur et non pas d'un visiteur du site.Donc pour ça, on va utiliser self.request.
00:01:58 :Donc ça, ça nous permet d'accéder à la requête qui est en cours.Donc la requête, quand on actualise la page, elle va nous donner des informations.
00:02:05 :Par exemple, on va pouvoir vérifier si le user, donc l'utilisateur associé à cette requête,est connecté à notre site avec isAuthenticated comme ceci.Donc ça, c'est une propriété qui va nous dire si l'utilisateur de notre site est connecté à notre site ou pas.
00:02:19 :Donc s'il est connecté, on va pouvoir retourner le QuerySet tel quel.Donc le QuerySet avec tous les articles, même ceux qui ne sont pas publiés.
00:02:26 :Et si on n'est pas connecté, donc ça veut dire qu'on est un visiteur anonyme du site,dans ce cas-ci, on va filtrer le QuerySet.Donc on va retourner le QuerySet, mais on va rajouter un filteret on va dire qu'on veut filtrer uniquement les articles qui sont Published égale True.
00:02:41 :Donc dont le champ Published a la valeur True.Donc on filtre avec Filter ici.Et donc si on est connecté isAuthenticated, on retourne tout,sinon on retourne uniquement les articles qui sont publiés.
00:02:53 :Donc je reviens sur mon interface ici.Actuellement, je suis connecté dans mon interface d'administration.Si j'actualise, on voit que c'est bien marqué Bienvenue Tibache, donc je suis connecté.
00:03:02 :Donc si j'actualise le site, ça ne devrait rien changer.J'ai bien mes trois articles ici qui sont affichés.Si on va voir dans mon interface d'administration, j'ai cet article,donc un premier article qui n'est pas publié.
00:03:12 :Mais ce n'est pas grave, il est quand même affiché dans ce cas-cipuisque je suis connecté avec mon utilisateur.Par contre, si je me déconnecte,donc là je suis déconnecté de mon interface d'administration.
00:03:21 :Si j'actualise le site, là on voit qu'on a bien le premier article qui n'est plus visible.Donc on a bien nos deux cas de figure ici.
00:03:27 :Donc vous voyez qu'on a pu récupérer ce Query Set,faire une vérification et filtrer le Query Set en fonction de cette vérification.Donc c'est vraiment très pratique.
00:03:35 :C'est un peu perturbant au début si vous ne connaissez pas les Classes Based View,donc les vues fondées sur les classes puisqu'il faut connaître ces méthodes.
00:03:41 :Il faut savoir comment faire ce genre de manipulation.Alors que dans une vue basée sur une fonction,c'est généralement un petit peu plus facilepuisqu'on aurait déjà par exemple récupéré tous les articlesen faisant blogpost.objects.all.
00:03:53 :Donc on aura pu faire cette même vérification ici directement dans la vueet filtrer les articles directement dans la vueen fonction de cette structure conditionnelle ici.
00:04:02 :Là, on est obligé de passer par cette méthode précise.Donc là, il faut vraiment que ce soit exactement ce nom,get-queryset, pour qu'on puisse surcharger cette méthodeet intercepter, si vous voulez,les données qui sont récupérées automatiquement par notre vuepour les modifier et les redonner à notre fichier HTML ici
Ce n'est pas fini...
✋
Tu as complété % du parcours 🔥
Termine l'intégralité de la formation pour pouvoir débloquer ton attestation de réussite.