Session du 24 avril 2025 à 21h00
Développement Web & Frameworks
Deviens membre Premium magic_button
Cette session de mentorat est réservée aux membres Premium. Rejoignez-nous pour accéder à toutes les rediffusions des sessions de mentorat !
Premium
- check +100h de formations
- check +180 exercices de code
- check +100h de mentorats en rediffusion
- check 20 projets
- check Mentorats groupés hebdomadaires
- check Support individuel avec nos mentors
Session de mentorat Django
Nous allons travailler sur l'administration.
00:00:00 :Et voilà, ça a marché direct.Bonsoir à tous, du coup ce soir ça va être du Django mais du Django orienté administration.Parce que l'admin si vous l'utilisez basiquement, ça peut pas être pratique du tout,et vous pourrez en mettre un frein des fois.
00:00:26 :Et on va voir comment on peut améliorer ça.J'ai préparé une micro-application, j'ai rien préparé spécial de plus,donc on va le faire ensemble en même temps, on va le construire en même temps.
00:00:37 :Parce que pour ceux qui vraiment veulent se mettre à Django, l'administration c'est important d'avoir un truc ergonomique.Si vous avez un truc qui est fait vraiment basiquement, dire allez je mets que des admins.site,
00:00:50 :comme ça mon modèle qui apparaît dans l'admin, en fait à force vous allez galérer, mais vraiment vous allez voir.J'ai déjà partagé mon écran.Vous voyez mon écran là ?
00:01:11 :Est-ce que vous le voyez bien ou pas ?Oui, parfait, merci.Super, super, ok.J'entends que c'est bon, tout le monde est rajoint.Ok, salut Bakary.
00:01:30 :Donc, c'est une chose que j'ai préparé la dernière fois, des modèles que j'ai préparé la dernière fois, que j'ai pas utilisé.Bakary, si tu as une question dis-moi.
00:01:42 :Ou c'est une erreur ?C'est peut-être une erreur alors.Donc, j'ai préparé des modèles, un truc assez basique, mais je pense qu'ils vont être bien pour l'exemple.
00:01:56 :J'avais préparé ça l'autre fois, je n'en avais pas parlé, et puis du coup on n'avait rien fait sur l'admin.On n'avait pas eu le temps.
00:02:01 :On était restés un peu longtemps sur les signaux.Du coup, là, pour le principe, vous avez entre guillemets un magasin, très simplifié,donc avec un modèle catégorie, un modèle sous catégorie.
00:02:18 :Donc une sous catégorie va appartenir à une catégorie.Un modèle product, c'est le produit, et product variant, ça va être les variantes du produit.Par exemple, je dirais une bêtise, mais si vous avez genre un ketchup 300 grammes, vous avez un product et un product variant.
00:02:33 :Il n'y a pas de variant entre guillemets.Par contre, si vous avez, je ne sais pas, un pull en XL, un pull en XS, là, il peut y avoir des variantes de taille et de couleur.
00:02:44 :C'est le même pull, mais il y a juste des variantes.En gros, c'est le principe.Je suis en train de développer une application en ce moment, où j'ai un peu galéré à réfléchir à comment je vais faire ça,et donc je suis parti là-dessus sur les produits et les product variants.
00:02:56 :Donc un produit variant va appartenir à Product.Et les product variants, du coup, ont des images.Un modèle à part.Je n'ai pas créé une image ici, j'ai fait un modèle à part.
00:03:09 :Comme ça, les product variants peuvent avoir plusieurs images.Est-ce que pour la présentation des modèles, c'est bon ou pas ?Oui, c'est bien.Je rebondis juste 30 secondes sur ce que tu as dit que tu avais galéré pour définir.
00:03:32 :Moi, c'est pareil.Ça, c'est une galère aussi.Une petite parenthèse en passant, j'ai cherché des formations pour comprendre les bases de données,mettre les relations.
00:03:44 :C'est vraiment le truc.Je commence à avoir l'habitude à force.C'est un truc où j'arrive bien à me faire mes plans de bases de données.
00:03:54 :Ça, j'y arrive bien.C'est mon truc.J'aime bien ça.Là, il est simplifié.Tu verras, la vraie application, les modèles sont énormes.Ils vont de là et terminent là.
00:04:04 :D'accord.Là, j'ai fait un simplifié.J'ai une question.Franck, je pense que tu as un problème de connexion.Ça fait un peu comme l'autre fois, quand tu n'as pas l'enregistrement de ta connexion.
00:04:16 :Baptiste, une image est liée à un product variant.Puisque dans tous les cas, il y aura forcément un product variant dedans.Il y aura forcément au moins un product variant.
00:04:31 :Je vais l'appeler, par exemple, ketchup pour 150 grammes.Là, j'aurais juste ici un ketchup pour 150 grammes.C'est vraiment le cas où tu as des habits où il y aura des tailles.
00:04:43 :J'aurais pu simplifier, mais c'est juste pour montrer pour l'administration.J'ai prévu ça.Un modèle imbriqué.Vous êtes d'accord que dans l'admin.py,parce que là, si je fais ça,j'ai mon V11 qui est activé.
00:05:03 :C'est parti.C'est mon super site internet.Là, on ne s'intéressait qu'à l'admin.Là, on est d'accord que les modèles n'apparaissent pas dans l'admin.Je n'ai rien. Je ne vois rien.
00:05:23 :Pour ça, vous me dites,si jamais vous avez un doute,il faut importer vos modèles.Et là, on importe.On avait quoi ?On avait catégorie,subcatégorie.
00:05:39 :Ça m'aurait bien arrangé, la copilote.On avait subcatégorie.On avait product,product, variante,product, variante, image.On a combien ? On n'a que ça.C'est tout.
00:05:51 :C'est mal importé.On avait catégorie 1, 2, 3, 4, 5 modèles.OK.Et donc, pour les faire dans l'administration,je crois qu'il y a quelqu'un qui a rejoint la session.
00:06:01 :J'aurais bien dû le faire.Mehdi.Est-ce qu'il a réussi ?Salut, Mehdi.Du coup, ce soir, on est sur l'administration Django.Salut, salut.C'est donc.
00:06:23 :Salut, salut.D'accord.Pour faire apparaître, du coup, un modèle,on va faire comme ça.On va faire ça.Si je veux faire apparaître la catégorie,maintenant, si je vais dans mon admin,on est d'accord qu'ici, elle apparaît.
00:06:43 :Pour ça, c'est bon pour vous ?Ou pas déjà ?Ça, c'est la base.Vraiment, le plus basique pour faire apparaître une catégorie,un modèle.
00:06:50 :OK.N'hésitez pas si vous avez des questions.Je commence vraiment par la base et après, on va...Je ne sais pas s'il y a des messages.
00:06:59 :OK.Je fais tout sur un écran,donc j'ai un peu la mise en abîme, là.Donc, on aurait même pu faire une boucle, d'ailleurs,pour afficher tout d'un coup,mais bon, ce soir, on va faire deux boucles.
00:07:10 :Il n'y a pas grand-chose.Il y en a une, deux, trois, quatre, cinq, six.On a cette catégorie.On a Product,Product Variantet Product Variant Image.
00:07:30 :Je devrais peut-être aller me chercher une imagequi me servira pour tous les modèles.Je ne sais pas.J'ai envie de ketchup ce soir,donc allez hop.
00:07:39 :Tac.Et on va se prendre un...Ouais, c'est pas mal, ça.Il est pas mal, celui-là.Hop.On a du ketchup.Hop.Donc, voilà.Maintenant, si je retourne dans mon site d'administration,voilà, j'ai toutes mes catégories Product.
00:07:54 :Donc là, on va juste se créer,voir pourquoi ce n'est pas pratique.Parce qu'imaginez,on sait qu'une sous-catégorie va être une catégorie.Donc, si je suis ici,et que je dois créer une sous-catégorie,il faut bien penser à créer la catégorie avant.
00:08:11 :Là, je n'ai rien.Bon.Alors, dommage.Donc là, sous-catégorie Sauce.Ici...C'est vrai que j'ai oublié,donc il faut que j'y aille.Je vais mettre épicerie, la catégorie.
00:08:24 :Hop.Le slug sera épicerie.Et on verra pourquoi aussi le slug,on va l'améliorer après.Voilà.Et mince, j'ai coupé mon...Tac.Retourne dessus.Retourne dessus.
00:08:40 :Voilà.Donc, j'ai créé ma catégorie.On a vu que ce n'était pas très pratique comme ça.Sous-catégorie, maintenant, on va l'ajouter.Et on va l'appeler, j'ai dit quoi ?
00:08:49 :Sauce.Slug, Sauce, catégorie, épicerie.Et ainsi de suite.Donc, imaginez, après,je vais vouloir créer un produit.Donc, on avait dit qu'on avait,pour un produit,on créait d'abord un produit.
00:09:01 :Après, on avait au moins une variante,au moins une variante du produit.Et ensuite,chaque variante a des images.Donc là, vous imaginez que sion veut une variante,il faut penser à aller ajouter la variante.
00:09:16 :Après, on va aller là,ajouter une image.Après, on va aller ici.Ah, il fallait un produit pour la variante.Vous voyez un peu la galère.
00:09:23 :Il faut aller jongler sur tous les menus.Moi, perso,c'est le genre de truc qui me saoule.Parce que j'ai fait une application une foisde jeu de rôle sur navigateur.
00:09:33 :Et je peux vous dire qu'il y avaitdes histoires, des branches, des choix,des images, des objets, des armes,ainsi de suite.Et c'était juste pas possible à gérer comme ça.
00:09:43 :Impossible.Fallait naviguer dans tout,revenir dans tout.Vous ne vous êtes pas perdu ?C'est bon ?Non, non, c'est bon.OK.On va attaquer des choses un peu plus sérieuses, du coup.
00:09:54 :Est-ce que je crée un produit un peu à l'arrache ?Ouais, allez.On va créer un truc un peu à l'arrachecomme ça pour l'instant.
00:10:02 :On va se dire, bon,c'est pas encore le faire.On va aller ajouter un produit.Un produit.Ketchup.350 grammes.Voilà.Hop.Le slug, on va le mettre ketchup.
00:10:17 :Et on va mettredescription.Hop.Il est dans les sauces.Est-ce qu'il est en promo ?Non.On s'en fiche.Voilà.Ensuite, il faut penser à la variante.
00:10:27 :On aurait très bien pu dire iciqu'il était sur le plus,mais c'est pas pratique, je trouve.Le ketchup.Hop.On met juste...J'aurais dû mettre le poids.
00:10:36 :On va dire que le poids est ici.Voilà.Le prix, il est à 4.Le stock, on met 2.Voilà.Couleur ensemble.Couleur...Ah mince, j'aurais dû le mettreen pas obligatoire.
00:10:46 :Tant pis, on va le mettre rouge.Forcément, c'est rouge.C'est pas grave.C'est pour la démo.Hop.On a ça.Et on a ensuite une image.
00:10:53 :On va l'ajouter à une image.Un autre ketchup.Je l'ai mis là.Ouais, c'est ça.Et voilà.Là, on a fait un peu de cheminementpour créer un produit de A à Z.
00:11:06 :Maintenant, moi, ce que je veux,qui est plus pratique,c'est par exemple,quand je clique sur catégorie,j'ai ma catégorie qui m'apparaîtet en dessous,je peux créer plusieurs catégoriessur la même page.
00:11:21 :Quand je clique sur produit,j'ai mon produit qui apparaîtet je veux en dessous,créer plusieursou un, au moins,variant sur la même pageet ajouter les images.
00:11:32 :Donc, ça, c'est possible.Là, c'est un peu plus avancé.Donc, ce que vous pouvez faire,je pense que je vais tout virercarrément et on va repartir de zéro.
00:11:43 :Hop.Ce qu'il est possible de faire.Par quoi je vais commencer ?J'ai pas rendu un inline.On va prendre une sous-catégorie.Ouais, allez.On fait comme ça.
00:11:56 :On va prendre un exemple.On va créer une classe.Donc, on va l'appelerSave Category Inline.On va créer ce qu'on appelleun inline.Et on peut avoirState Inline ou Tabular Inline.
00:12:13 :Alors, entre les deux,la différence, c'est quec'est une différence d'affichage.Tabular Inline, ça va s'afficheren ligne.Vous allez comprendre après.Je vais vous montrerqu'on fera un des deux.
00:12:23 :Et State Inline,ça part bien son nom,ça va être sous forme de pile,de colonne.Voilà.Si vous avez des questions,interpellez-moi en direct,en live.
00:12:35 :Je vois pas le chat.On va laisser un steak.J'aime bien les State Inline,en général.C'est plus facile.Et donc là,on a prévu ça.
00:12:44 :Donc, on va spécifier les modèles.Donc, on va avoircette catégorie.On va spécifierExtraégal 1.Et vous allez comprendrece que c'est après.
00:12:57 :On va même aller plus loin.On va faire un prépopulatTail Fields.Et on va mettre...Alors, ça, je crois qu'il fautspécifier le champ Slugcomme on l'avait tout à l'heure.
00:13:09 :Et ensuite,on va avoirle champ Name.Je vous explique.On va voir.De toute façon, vous allez voirtout de suite aprèscomment ça va fonctionner.
00:13:21 :Et donc, ensuite,je vais aller me créeradmin.register.Et je vais prendrema catégorie.Et là, on va personnaliserun petit peu.On va faire quoi ?
00:13:35 :On va faire...On va l'appelerla catégorieadmin.Simplement.On va hériter deadmin.modelAdmin.Donc, c'est fourni par Django.On passe par là.Et puis,là, on va faireun peu de customisation.
00:13:54 :Donc là, par exemple,on va direlistDisplay.En fait, ça, ça va être...Alors, je vais vous montrer.Je vais vous lancertout de suite l'admin.
00:14:03 :Name.Je vais le lancer tout de suite.Hop là.Je l'ai encore là.OK.C'est sur catégorie.Voilà.En fait,là, j'ai que Name.Mais par exemple,sur catégorie,dans mon modèle,j'avais...
00:14:20 :Name, Name,j'avais...Bon, j'ai qu'un slug.Ça va être un peu bidon,mais c'est pas grave.Hop.Je viens là.Hop.J'ai le slug qui est ici.
00:14:31 :En fait, ça vous permetd'afficher la listede tous vos...Comment dire ?De tous vos objets,de vos instances,comme ça,avec plusieurs informationsde visibles tout de suite.
00:14:41 :Vous allez voir après,on va faire un truc plus pousséavec Product,qui est beaucoup plus intéressantpour ça.Pour l'instant,on va s'intéresser surtoutaux inlines.
00:14:50 :Je commence par un peuà l'envers,mais c'est pas grave.Donc, on avait ditDisplay,et c'est pareil,on va...Prendre ça.Vu qu'on a un sluget un Name,ça sera pareil.
00:15:02 :Voilà.Et puis,on va spécifierInlines.Et la classe qu'on avaittout à l'heure,au-dessus,c'est seule catégorieInline.Et là, vous allez voir.Hop.
00:15:15 :Donc là,maintenant,je vais aller ajouterune catégorie.Donc là,il n'y a que ça qui apparaîtparce que j'ai effacétout le reste.Donc là,si je n'ai pas d'erreur,voilà,c'est que maintenant,j'ai ma catégorieet j'ai les sous-catégoriesen dessous.
00:15:30 :Donc,j'ai bien mis iciExtra est égal à 1.C'est pour afficherun formulaire vide supplémentaire.Mais je peux ajouterautant de sous-catégoriesque je veux.
00:15:38 :Donc là,par exemple,j'avais tout à l'heureépicerie,on va faire les fruitset légumes.Vous voyez que là,mon slug,il se remplit automatiquement.
00:15:47 :Ça,c'est parce qu'ici,j'ai fait un prixPopulated Fields.Du coup,j'ai mon champ slugqui écoute Nameet du coup,en fait,il se popule tout seul ici.
00:15:59 :Ça se fait tout seul.Et donc,j'ai une sous-catégorie,par exemple,fruitset légumes.Voilà.Et donc là,j'ai bien créé,du coup,deux sous-catégoriesautomatiquementavec ma catégorie.
00:16:14 :Je les ai crééessur la même page.Je ne suis pas passépar deux pages.Si on regarde sur l'épicerie,on voit bien que j'avaisdeux sous-catégoriesqui sont là,en dessous.
00:16:24 :Donc,on peut supprimeren passant par là,ainsi de suite.Voilà.Est-ce que ça vapour l'instant ?Explique-moi.Oui,ça va.OK.OK.Je continue.
00:16:42 :Du coup,j'étais parti là-dessus.Le problème,ce qu'il fallaitque je vous disepar rapport à ça,c'est qu'il y a un souci,c'est qu'avec Django,de base,on a un niveau d'indication.
00:16:56 :On a les catégorieset sous-catégoriessur la même page.Mais,je vous le dis tout de suite,sur les produits,par exemple,sur les produits,on avait le modèlequi était là.
00:17:07 :Le produit,on aimerait bien créerle produit.On aimerait bien créerle produit de variante,pas de problème,mais ajouter aussiles images.Le problème,c'est que de base,il y a un moyenassez compliqué,je crois que c'est possiblede le faire,mais c'est compliqué.
00:17:23 :De base,vous ne pouvez avoirque deux niveaux.Donc,vous allez pouvoir avoiraffiché produit,produit de variante,mais pas images.Donc,j'ai un moyenaprès de vous montrer,je pense qu'on fera un bonus,comment on peut fairepour afficherau moins trois niveaux,voire plus,d'imbrication comme ça
00:17:40 :sur une même paged'administration.Là,je voulais vous montreraussi,par exemple,la customisationde l'inventaire,vraiment,comment on va customiser çade l'inventairede l'administration.
00:17:55 :Donc,par exemple,pour les produits qu'on crée,on va faire çasur les produits,ce sera plus intéressant,je pense,parce qu'il y a pas malde champs.
00:18:05 :Il y a une description,une sous-catégorieet une promotion.Donc,ça sort sans promo ou pas.Donc,c'est parti,on va aller bosser un peusur les produits.
00:18:15 :Alors,donc là,on va passerparnotre décorateur,product,et on va se créer une classe.Donc,on va avoir,on va l'appelerproduct admin,add in,voilà,et on va hériterde admin.modeladmin.
00:18:42 :Et donc là,les produits,je peux pas,j'aurais dû en créer maintenant.Tac.Je ne sais plus comment fairepour commenter sur VS Code.J'ai un doute,je ne sais plus.
00:18:57 :Contrôle slash,ça ne marche pas ?Non, non, non,pas sur Mac,c'est chiant.Ah d'accord.J'en avais un autre.Bah,c'est pas grave.C'est pas grave.
00:19:07 :Je ne sais plus,il n'y avait pas un raccourci.Oui,pour prendre plusieurs lignes,je veux dire.Tout à l'heure,on va l'appeler du coupproduct.
00:19:26 :Hop.Hop,voilà.Les produits,donc les produits,là,ils apparaissent comme ça,on a juste le nom du produit.De base,avec Dango,vous allez juste avoir icile nom du produit.
00:19:47 :Ce qui est défini icidans product,il est là.Ça n'apparaît que le nomqui est ici,simplement.Je vais en ajouter un deuxième,un produit que je vais appeler,je ne sais pas,je vais appelerMayo.
00:20:03 :Mayo,voilà.Mayo.C'est de la sauce aussi.Et lui,il va être en promo.Non,allez hop,Mayo.Il y en a déjà deux,il y en a un dernier,comme ça,ça sera plus visible comme ça.
00:20:18 :On va prendre de la moutarde.Hop,moutarde.Hop.Et on est toujours dans les sauces.OK.Donc là,on est sur notre,basiquement,ça apparaît comme ça.
00:20:32 :Et maintenant,vous allez voir qu'on peut fairedes choses très sympaset ça prend son intérêtquand on a des gros modèles.Moi,je sais que ça m'a servi,je vous montrerai peut-être,je vous montrerai aprèssi vous voulez voircomment ça peut être pratique.
00:20:43 :Donc,ici,ça,on le vire.Ça,on le vire aussi.Voilà.Donc,ici,on va pouvoir passerce qu'on appelleune liste,non,un display.
00:20:58 :Donc là,c'est une listequi commenceavec Python,d'ailleurs.On voit bien que c'est,je pense à Johanna,là.On voit bien que là,en fait,on travaille vraimentavec des objets que du Python.
00:21:11 :J'ai des dictionnaires ici.Là,j'ai une liste.Je vais mettre,on aname,stock,description.OK.Le name.On peut mettre,du coup,il y a une subcatégorie.
00:21:28 :Voilà.On peut mettresubcatégorie.On peut voirs'il est en promo.Si je fais une faute,ça va penser de toute façondonc il faut le corriger.
00:21:38 :Et puis,il n'y a pasdix milleslogues.On s'en fiche un peu.On va rester là pour l'instant.Et maintenant,si je retourne.Et voilà,j'en étais sûr.
00:21:54 :C'est normal.C'est mon décorateurqui plante.Il est où ?Voilà.Donc là,maintenant,je retourne ici.Voilà.C'est déjà plus sympa.Je vois très bienquel produit,à quelle subcatégorie il estet je vois s'il est en promoou pas.
00:22:12 :Ça va pour le moment ?Oui.OK.Il n'y a pas de question.Hop.Je vais couper ça.Maintenant,on va continuer un peuà personnaliser le truc.
00:22:25 :Donc là,il est où ?Ici.Et on peut fairebeaucoup d'autres choses.Par exemple,on peut définir iciqu'on a une listeet le table.
00:22:35 :Et je ne sais pas,on pourrait très bien dire icique si il est en promo,ça peut être pratique.Donc regardez bien.Là,ici en promo,hop,je peux directement modifier iciet sauvegarder.
00:22:51 :Donc là,si je n'ai pas d'instance,je peux le faire ici,directement.D'accord.Excellent.C'est que le début.On peut faireencore plus de choses.
00:23:01 :Un circule,ça va être galèresans le faire maintenant,je pense.Bon,il y a d'autres catégories avant.Si,allez,on va faire ça.On va définirun search fieldou des search fields.
00:23:17 :On va direle nameetla descriptionqu'on avait dans le modèle.Description,c'est ça.Et maintenant,on va juste allercréer un produit.On va l'appeler,je ne sais pas,on va mettre n'importe quoi.
00:23:34 :Il y a quoi comme chose ?Je n'ai pas idée de sauce.Une sauce burger.Et en description,je vais mettre Patrick.Ça n'a rien à voir,je suis d'accord.
00:23:47 :OK.Maintenant, ici,j'ai ce qu'on appelleles search fields.Par exemple,je vais cherchersi j'ai des moutardesdans mon magasin.Il me les trouve.
00:23:57 :Après,j'aimerais bien direest-ce que quelque partdans la description,je ne sais pas,par rapport à la description,là,j'aimerais bien diredans la description.
00:24:08 :Pourquoi il me trouve ça ?Effectivement,dans la description,j'ai Patrick.OK ?Excellent.Les search fields,je ne connaissais pas ça.Oui,on peut faire un moteurde recherche comme ça.
00:24:23 :Et,on peut même,je ne sais pas comment le faire,on va le faire après,je pense.Quand il y a beaucoup de,par exemple,ici,sur catégories,des fois,on peut avoir beaucoupde clés étrangères,beaucoup de choix.
00:24:43 :C'est un menu déroulant.Si on le met en éditable,c'est un menu déroulantet ça peut être galèreà retrouver.Et en fait,on peut implémenterde l'AJAXet ça fait un petit moteurde recherche iciet on peut recherchercomme ça les catégories.
00:24:55 :D'accord.Je vois.On va le faire après.Donc là,j'ai mes search fieldset on va fairele prix.Bon, ça,on l'a vu tout à l'heure.
00:25:05 :Celui-là pour,hop là,je le copie.Celui-là,c'était pour,comment dire,quand on ajoute un produit,en fonction du name,il va remplir tout seulle slug.
00:25:21 :Voilà,c'était ça.Bon,celui-là est sympa,c'est gadget,mais c'est sympa.Et ensuite,on peut s'amuserà faire plus de chosesaussi.Donc là,maintenant,je vais utiliser une méthodeet je vais la,je ne sais pas,on veut savoircombien il y a de variantpour un produit.
00:25:40 :Donc,Def Display,Variant,mettre un S ou pas ?Donc là,mes paramètres,je vais les mettre,je vais respecterles conventions Django.Donc,Self,Objet,ici.
00:25:57 :Voilà.On va retourner,par exemple,Return,et on va se dire,pour chaque instance,de Product,point,c'est Variant,c'est ce que j'avais mis,parce que j'ai une clé ici.
00:26:11 :Product, Variant,j'ai Product,j'ai mis Variant,donc j'ai une relation étrangère.Donc je peux,depuis Product,je peux faire Product,point Variant.Donc,Objet,ici,c'est Product,point Variant.
00:26:27 :On va arrêter icisi vous avez un doute,un Count.Et en fait,on fait un Point Count comme ça.Et ici,dans le Display,je peux venir làet mettreDisplay,Variant,Count.
00:26:42 :Donc,on peut faire des chosescomme ça plus personnalisées.Donc là,j'espère que je n'ai pas fait de...Donc déjà,il me l'aurait mis.Voilà.
00:26:51 :Donc là,je n'ai pas créé de Variant,et lui,je sais que j'ai créé une Variant.Donc là déjà,on pourrait retournerle nombre de Variantsavecune méthode personnalisée.
00:27:01 :Ça va, ça ?C'est fort.Ah,je trouve ça balèze.Alors par contre,je n'aime pas le nom ici.Ça va être chiant,mais je n'aime pas le nom.
00:27:14 :Donc là,on va faire un truc un peu gadget.On va se mettre en dessous ici,et on va se mettreunDisplay Variant.Non,10.
00:27:23 :Hop là,10.Là,Variant.C'est ça.Count,c'est comme ça,c'est le nom,et c'est .short,short,c'est short description,je crois qu'on met.Descriptionest égale,on va l'appeler,je ne sais pas,nombre,nombre de Variants.
00:27:45 :Voilà.Donc ça,c'est gadget.Ici,on a Display Variant Count,et voilà.Là,maintenant,c'est le nombre de Variants.Ce n'est pas gadget du tout.
00:27:56 :C'est bien.Oui,c'est très pratique.En notre cas,c'est gadget.Mais sinon,c'est très pratique.En général,je vais redéfinir le nompour que ce soit pratiquepour la personne qui lit.
00:28:07 :Sinon,tu te retrouves avec des gros noms.Oui,puis des noms en anglaisqui n'ont rien à voir.Là,c'est bien.Alors,maintenant,un truc encore,pas mieux,mais encore,chose de bien.
00:28:21 :Ici,vous avez déjà remarquéqu'on pouvait sélectionnerdes instances.Et elle va direqu'on peut les supprimer en masse.C'est bon.Pour vous.Oui,pas de problème.
00:28:36 :OK.Il est possiblede faire une action personnaliséequ'on va rajouter ici.On va redéfinir iciune méthode.Ce qui peut être pas maldans notre cas,c'est qu'on veut direque là,on ne peut que tout supprimer.
00:28:54 :Mais on va direqu'on peut les supprimeren promotion.Ici,active.Donc,on va à la PDF marqueAs.Comment on dit en anglais ?
00:29:03 :As a feature.Comme ça,je pourrais.Feature.Voilà.Là,c'est pareil.On vale paramètre Django.Il faut un query set.C'est le query setqu'on sélectionne.
00:29:18 :Voilà.Et là,je ne sais pas,je vais mettre Baked.Ça va êtrequery seton va faire un point.C'est le champpoint update,c'est ça ?
00:29:33 :Donc, c'est le point updateisfeaturedtac,égalà Swoop.Voilà.Donc,l'idée,c'est de passerce champ-là à Swoop.Et je pensequ'on pourraits'arrêter là pour l'instantavec ça.
00:29:51 :Normalement,c'est bon,parce que j'en ai oublié.Je réfléchis.Il n'y a rien à retourner,je crois.Il n'y a pas besoin de fairede return, en fait.
00:30:00 :Non,il n'y a pas de valeur retourà attendre de ça.Donc, par exemple,je recharge la page.Ça ne risque pas d'apparaîtreparce qu'il faut que je le mettedans mesactionspersonnalisées.
00:30:13 :Voilà.Eton doit lui mettresous forme de chaîne de caractèredans la liste.Le nommarquefeature.Voilà.Normalement,il est là.Donc,si je ne suis pas gouré,par exemple,je veux que Mayo et Ketchupsoient en promo.
00:30:32 :Hop,si je fais Go,est-ce que ça va marcher ?Voilà.Excellent.Ils sont passés en promo.Donc là,l'action est bidon,mais imaginezce que vous pouvez faire avec ça.
00:30:44 :Non,ce n'est pas bidon du tout.Alors,le texte que tu as misqui apparaîtdans la liste déroulante,du coup,il faut que ce soit fidèleau codeou tu peux mettre ce que tu veux.
00:30:55 :Toi,tu voudrais que...Je ne sais passi tu le mets en français.Ça ne marche plus ?Si, si, si.D'accord, ok.C'est ce qu'on a fait tout à l'heure.
00:31:07 :Ouais, voilà.Tu mets une shortet on va l'appelerje ne peux pas mettre en promo,désolé,j'ai pas un grand vocabulaire ce soir.Ouais, c'est bien, c'est bien.
00:31:20 :Et normalement,si je retourne dessus,je suis là.Voilà, il est là.Ok.Il y a même un trucqu'on peut faire qui est sympa.
00:31:33 :C'est qu'il est possibleet c'est même,je pense, très bien de le faire.On peuticiutiliserMessageUser.Voilà, MessageUser.Merci l'autocomplétion.Et on peut mettreun requestJe me demande s'ils n'utilisent pasen arrière-planle framework MessageUser.
00:31:56 :Non, je ne pense pas.Moi, j'ai un doute.Et là, on va se mettreun ici.On va mettreUpdated.C'est là.On va mettreProduitsont étépas mis en promo.
00:32:14 :Désolé.Je vous mets ça.Voilà.Et maintenant,ça, je vais les enlever.Et si je reviens ici,mettre en promo.Cette fois-ci,ça n'a pas marché.
00:32:30 :Si, parce que tu les avais pas sélectionnés.Et après, il faut que tu fasses ton action.Ah, je n'ai pas sélectionné ?Oui, oui.C'est ça.
00:32:37 :Ah, je n'ai pas sélectionné.Ça va marcher, là ?Non, j'ai fait une connerie.Ah, non.Ah, d'accord.OK.Bon.Qu'est-ce que j'aurais fait ?
00:32:46 :J'ai bien mon QueueReset.Ça dégueule tout.Si je l'enlève,est-ce que c'est ça qui me plante ?Ça me paraît bizarre.Ça me paraît bizarre.
00:33:01 :Tout à l'heure, ça fonctionnait, en plus.Oui.Et maintenant, ça ne marche plus.Oui, mais attends.J'ai un doute.Il ne faut pas cliquer sur Go ?
00:33:12 :Si, je suis bête.Merci.Oui, parce que là,la manip va trop vite, en fait.Je ne sais pas si tu as réactualisé ton code, là, du coup.
00:33:22 :Si, normalement, si.OK, d'accord.Donc, après, tu fais ta liste déroulante et Go.Oui, et tu as raison.Je n'ai peut-être pas…Actualisé ?Non, j'ai raté.
00:33:34 :Au cas où.Oui, c'est bon.Voilà.Voilà, c'est ça.Donc, là…Et là, Go.Oui.Et voilà.Ici, j'ai bien marqué deux produits ont été mis en promo.
00:33:43 :Voilà, c'est bon.Je peux personnaliser le message, ici.Oui, parfait.Il va s'appliquer, là.C'est génial, Gabriel.Avec la ligne, on peut faire des trucs de ouf.
00:33:52 :Vraiment.Oui.Il y a des choses encore vraiment bien à faire.Donc, on a vu les Inlines.On a vu les…OK.On pourrait faire un autocomplete.
00:34:02 :Un autocomplete.Je pense que ça pourrait être sympa, ça.J'ai créé combien de sous-catégories, là ?Oui, bon, on va faire le test avec trois.
00:34:11 :Ce n'est pas grave.Donc,on va revenir sur le code.Et là, on va partir sur autre chose.C'est ici,en dessous du search field,on va faire un autocomplete field, ici.
00:34:23 :Et par exemple, c'est pour notre clé entrée,notre clé étrangère,qui est cette catégorie.Sauf que quand vous faites ça,pensez à aller…Donc, là.
00:34:37 :Aller créer, ici,un min point site.Sinon, ça ne marche pas.Je me suis fait avoir la première fois.J'ai galéré à savoir ce qui se passait.
00:34:45 :Il faut définir, ici,une classe, en fait,pour votre sous-catégorie,pour que ça fonctionne.Pourquoi ?Vous allez voir.Subcatégorie.Min.Là.On irait toujours dans la catégorie.
00:35:02 :Donc, là,c'est une catégorie.Min.Là.On irait toujoursdu modèle min.Et il faut, au moins,définir un champ de recherche.Ici, puisqu'on va aller rechercher,en fait,sur le nom de la catégorie,de la sous-catégorie.
00:35:19 :Ici,on doit définirnotre nom,puisqueon va aller faireun autocomplete fieldsur la sous-catégorie.Donc, si on ne définit pas,ça ne marchera pas.
00:35:31 :Oui, je comprends.J'ai mis une demi-heurela première fois à trouver.Et ça ne marche pas.C'est normal.J'ai fait la même erreurque tout à l'heure.
00:35:40 :Voilà.Et donc, maintenant,si je suis là,sur le burger,imaginez que vous avezplein de catégories ici.Vous pouvez rechercher comme ça.Il y a un petit moteurde recherche à l'intérieur.
00:35:51 :Hop.Ouais.Ça recherche comme ça.Voilà.Excellent.Hop.Il faut que ça réussisse.Voilà.Donc, ça recherche comme ça.Voilà.Donc, ça, c'est encoreun petit truc en plusqu'on peut rajouter.
00:36:05 :Et juste,il y aune chose que je voulaisvous montrerparce que...Ouais.Allez, on va partir.On va regarder ça.En fait,ce que je disais tout à l'heure,c'est qu'on peut...
00:36:23 :Là, on a les produits.Ah, je ne l'ai pas fait encore.On avait la catégorie.OK.Je ne l'ai pas fait pour les produits.On peut le faire rapidement.
00:36:31 :Pour les produits, en fait,on va afficher les produits,les variants de produitset les images, en fait,sur la même page.Donc, il y a un trucqui s'appelle...
00:36:39 :C'est Django.Admin, je crois.Voilà.C'est ça.Et lui,j'aime bien aller sur le...sur le GitHub.Voilà.J'ai mis un doc là, bien fait.
00:36:55 :Donc, il y a Django,mais c'est admin.On va y installer.Hop.Et là, on regardecomment ça fonctionne.Donc là, ils vous disent icidans les settings,ils allaient installer ça.
00:37:07 :Hop là.Je vais le mettre ici.Et il nous dit quoi d'autre.Alors, ça, c'est pour ceuxqui ont Django Grappelli.On pourrait s'installer en live,savoir à quoi ça ressemble.
00:37:23 :Qu'est-ce que Django Grappelli ?Alors, c'est un appareilqui permet d'installerce que Django Grappelli.Euh...Hop là.C'est sympa.Enfin, ça doit être sympa.
00:37:36 :En fait,je ne sais pas si j'ai un...si on peut aller sur le GitHubplutôt du Django Grappelli.Il n'y a pas le lienvers le GitHub ici ?
00:37:47 :Je l'avais assis là.Il y a l'article officiel,je crois, dessus.Voilà.En fait,ça permet de faire une super admincomme ça, visuellement.Wow.
00:38:01 :D'accord.J'avais installé autre chosela dernière fois,mais qui n'était pas génial,je trouve.Mais je n'ai pas encore testécelle-là.Je vais la tester,voir si elle est bien.
00:38:13 :Bon, voilà.C'est Django Grappelli.Ça, on ne va pas le faire.Et en fait,on va l'installer plus.Et on va revenir sur les codes.
00:38:23 :Donc là,ce qu'on va faire avec ça,on va aller importer, du coup,nested-admin.Hop là.Ce qu'on a installé là.Et du coup,on va se faire...
00:38:39 :Ça va aller très vite,en fait, à faire.On va faire deux classes.Juste deux classes.On va l'appelerProduct,Variant,Image.On va se faire des imagesdans les variantes.
00:38:51 :Inline.On va hériter denested-admin.Alors, c'est nested,t'as vu.Nested,tabulaire,inline.Je ne fais pas de bêtises.Tabulaire, inline.Voilà.Et en fait,j'utilise mon perso.
00:39:09 :Ça, c'est pratique.Hop, on va utiliserProduct, Variante, Image.Hop.Et on va se mettre un extra.Et t'es gars là.Une deuxième classe.On va l'appelerProduct,Variante.
00:39:25 :Voilà.Inline.Pareil,c'est du reste.On va le faire en staked.Ça sera plus facile peut-être.C'est juste la forme.Il change un tas.Staked.
00:39:38 :Non, c'est nested.Nested,nested,nested,nested,inline.Ça doit être ça.Faut retenir.Hop.Et là, du coup,on va prendre le modèleProduct, Variante.
00:39:53 :Voilà.On va se faire un extra.Et t'es gars là.Un.Et on va lui-mêmelui donnerun inline.Et c'est inline.Ça va être du coupnotreProduct, Variante, Image,inline.
00:40:08 :Il va avoir son inline.Et ici, dans Product Admin,on va justemodifierça.Hop.On va mettre .Et c'estnestedmodèle admin.En fait,il y a qu'une questionde classe à changer.
00:40:24 :Et on inlinemaintenant pour finir.Et on va voir si j'ai une erreur.On va lui diredonc c'est Product,Variante, inline.Voilà.Donc,on ad'abord créé lui.
00:40:37 :Ensuite, on aparce qu'on va avoircomment dire,des images qui vont êtreattachées à chaqueproduit de variante.Donc, mes images,elles sont là.
00:40:48 :Les variantes,elles sont là.Donc, j'ai mis les images ici.Et dans les produits,j'ai misles produits eux-mêmes.Les variantes de produits.Et si je retourne,j'espère que ça va fonctionner.
00:41:00 :Parce que débugger un nested admin,ça va être chiant là.Hop.OK.Donc, par exemple,si je vais dans Produits,déjà il s'affiche ici.Si je fais ajouter Produits,il s'affiche.
00:41:13 :Donc là maintenant,en fait, je peux ajouter mon produit.Donc, je vais appeler,je ne sais pas,je vais mettreune sauce frite par exemple.
00:41:21 :Tac.J'en fiche.Une sous-catégorie.Maintenant,j'ai ma variante de produitqui apparaît.Donc, je peux dire,enfin bref,bon là,il n'y a pas vraiment de variante.
00:41:33 :Mais,on pourrait mettre ce qu'on veut.Bon là,j'ai des champs obligatoires.Donc, c'est un peu bête de mettre ça.Mais bon,on s'en ficherait dans n'importe quoi.
00:41:40 :J'aurais dû les rendrepas obligatoires ces champs-là.Et ici,en plus maintenant,je peux avoir l'image.Je choisirai une imagesur mon produit.Donc, en fait,vous pouvez faire le,comment dire,le cheminement completen fait de,en vous créant un produit,sa varianteet son image,vous le faites sur une page.
00:41:59 :Parce que maintenant,du coup,je peux dire,je vais ajouter une autre imageà cette variante-là.Je vais ajouter une autre variante.Hop.D'accord.C'est énorme ça.
00:42:09 :Ouais.Tu ne peux pas faire ça.Avec Django,de base,tu ne peux pas le faire.Je l'ai fait tout à l'heure,mais que sur deux niveaux.
00:42:16 :Donc,j'aurais très bien pu le faire tout à l'heureavec produit,produit de variante.Mais là,en plus,c'est grâce à Django.Et donc,ça,c'est grâce à ce petitnested adminqui est vraiment,je vais l'adopter,pour le projet en coursque je fais làpour un site de e-commerce.
00:42:32 :Je l'ai complètement adopté.D'accord.Du coup,pour le projetde gestion de stock,on pourrait très bienl'utiliser en fait.Voilà,vous prenez ce que vous voulez.
00:42:41 :Là,en plus,ce que je vous montre,ce n'est pas pratique.Ah oui ?Et surtout,pour un projetde gestion de stock,tout ce qui est là,ça va vous servir.
00:42:51 :Surtout sur les displaysdu table,je pense.Pour les fonds de recherche,aussi peut-être.Ceux-là vont être pratiques,je pense.Je regarde.Et puis,oui,même du inline,comme on a vu làavec nested inline.
00:43:06 :Donc,voilà.Après,si vous voulez,rapidement,je vais le regarder.Donc,voilà.Après,je vais le regarder.C'était quoi,Django ?Si on veut voirà quoi il ressemble rapidement,c'est Django Grappelli.
00:43:25 :Je ne sais passi c'est facile à installerou pas.On va voir.OK.Je clique sur GitHub.Alors.Ah non,il n'y a pas la doc.
00:43:35 :On va retourner là.Hop là.Alors,on y va vite fait.On va voir à quoi ça ressemble.Puis,on va s'arrêter là.Si j'y arrive à l'installer,je ne suis pas sûr encore.
00:43:47 :Je ne sais même pass'il est compatibleavec la dernière version de Django.OK.Il nous a installé ça.Donc,évidemment,il faut l'installer avantl'application adminqui est là.
00:43:57 :Donc,on va l'installer avantce qui est logiquequi est là.Il faut le mettre ici.Et puis,ils disent quoi ?OK.Ils veulent qu'on mette leur URLce qui est normalpour,j'imagine,pour les templates.
00:44:16 :Et puis,on a quoi ?On a le contextede processer request.Il y a de base celui-là.Je n'ai rien à dire.Il y a de base.
00:44:25 :Donc,il n'y a que leur URLà mettre.Il est à mettre en dessousou au-dessus ?Au-dessus.OK.Et ici,include.Je ne sais passi ça va marcher.
00:44:39 :Je n'ai jamais testé.Je ne suis pas sûrque j'oublie une étape.Ça me parait trop simple là.Et si je revienssur l'admin.Ça fait un petit truc déjà.
00:44:53 :OK.Ça a changé.Mais ça ne va pas être...Voilà.À mon avis,avecnested,ça ne doit pas marcher,je pense.Oui.Parce qu'on cumuletrop de...
00:45:11 :Comme si on cumulaittrop de plugins.Oui.Je comprends.Dans ma catégorie,ça marche.Oui.Sauf que si je le cumulesur produitsoù j'ai mis un nested,ça ne va plus.
00:45:22 :Oui.D'accord.Il faut rester pur,en fait.Je pense.Oui.Je comprends.Mais c'est pour çaque je n'aime pas mettrece genre de...Comment dire ?
00:45:33 :Changer vraimentles templatesde mon adminparce queje n'aime pas troptoucher à l'admin.Un nested admin,c'est vraiment le maximumque je touche.
00:45:42 :En général,je ne touche pas tropà l'admin.Bon,on fait un petit truc ici.En plus,les templates,je fais toujours attentionaux dépendances.
00:45:51 :Du coup,s'il y a un trucqui pètesur une mise à jour,ça te fait péterton admin.Donc,c'est moyen.Complètement,je suis d'accord.
00:46:01 :Oui.C'est pour ça.Je voulais testerce que je n'ai jamais testé.On aura vuce que c'estde le rappeler comme ça.Super.Super assistant,Gabriel.
00:46:11 :Merci.Excellent.On a vubeaucoup de choses.Oui.Il y a un replay.C'est chargéen contenu.C'est génial.Là,oui,il y a du contenu.
00:46:23 :C'est bien.Avant de vous lâcher,est-ce que je l'avais missur celui-là ?Je l'avais montréune fois.Je ne sais plussi j'ai refaitmon véran sur celui-là.
00:46:32 :J'ai un véran d'actif.Est-ce que j'ai mêmeun requoirement ?Oui.C'est quel python,quel suje ?Ah oui,j'en étais sûr.Si je faisun rm-rf,véran,hop,python,véran,véran.
00:47:00 :Je vais le recréer ici.Je vais relancermon VSCode.C'est bien.C'était juste pour vous montrerl'administration virtuelle.Si ça vous demandede la configuration,ce n'est pas grave.
00:47:15 :On ne fera pas ça.Il ne va pas me cherchermon véran.Voilà.J'avais un problèmeen rabord essencede celui-là.C'est un peu galère.
00:47:28 :Il ne va pas me le chercherdirect.Il faudra que je lui refassemon variable d'environnement.Monenvironnement virtuel,en fait, il ne devait pas allersur ce projet-là.
00:47:39 :Du coup, il galère.Ce n'est pas grave.Je le ferai plus tard.Je le ferai plus tard.C'est un gros projet.Je le ferai plus tard.
00:47:46 :Sinon,c'est tout ce que je voulaisvous montrer ce soir.Ah,Johanna,il y a un Grappelli.Je ne sais pass'il y avait un esthètedans Grappelli.
00:48:01 :On peut regarder vite fait.Si je tapeDjangoesthèteet Grappelli,mais à mon avis,ça me paraît compliqué.Mais si,si, si,sans même regarder,je repartage mon écran.
00:48:18 :Je suis sûr quetu as raison.Tu as complètement raison.Si je reviens là,alors ce n'est pas ici.Je pense que si on tombesurDjangonational admin,il y avait écritje crois d'ailleurs.
00:48:37 :J'ai rêvé.Il ne parle pas de Grappelli.Sinon,tu fais un contrôle FGrappelli.Ah,attends,sur le GitHub,il en parlait,je crois.Tiens,voilà.
00:48:54 :Tu as raison.En fait,en fait,on aurait pu rajouter ça.Bon,sur l'interface,je n'avais pas l'impressionque ce soit beaucoupplus sympad'avoir Grappelli,maisdonc,ouais,bravo,tu as raison.
00:49:11 :On pouvait iciinstallerl'URLexprès pour Django Grappelli.Alors,le problème,le problème,c'est que là,ça fait quand même pas malde dépendance en fait.
00:49:22 :Il faut que les deux soient raccords,quoi,que si il y en a unqui se met à jour,qu'au niveau des URL,ça,il faudrait qu'il n'y ait rienqui se casse,quoi,c'est chaud là.
00:49:32 :Je ne suis pas très chaudde tout ça,de toute façon,donc c'est juste queje voulais tester.Mais en tout cas,oui,donc effectivement,on peut,on peut avoirl'installer avec Grappelli.
00:49:43 :Le problème,c'est quepour les autres,je ne sais passi ça marcheraitparce que par exemple,là,je vous montre un dernier.Il y en a unqui est assez fou.
00:49:53 :C'est Django Unfold.Il y a une démoqui existe.Là,voilà,c'est ça.C'est Django Unfold,qui est vraimentpas mal du tout.Elle est sympa,celle-là.
00:50:04 :Ça me paraît lourd.Alors,c'est pareil,je ne sais pas si,je ne sais pas,en fait,j'ai trop peurqu'il y ait un trucqui se casse à un moment donné.
00:50:13 :Mais bon,après,il faudrait bien essayer.Après,il y a tous les thèmesdisponibles,je crois.Vous pouvez allervoir les thèmes.Ouais,eux,ils ont vraimentbeaucoup de choses.
00:50:26 :C'est un truc de fou.C'est un truc de fou.Bon,voilà.J'espère que ça vous a plu,en tout cas.Ça a duré un peu longtemps,mais...
00:50:34 :Oui,personnellement,ça m'a beaucoup plu.Parce que,j'ai fait du Django,mais je ne connaissais pasforcément toutes ces pratiquesavec l'administration.Oui,c'est vrai,c'est vrai.
00:50:45 :Donc,ça m'a beaucoup plu,parce que,j'ai fait du Django,mais je ne connaissais pasforcément toutes ces pratiquesavec l'administration.Oui,c'est vrai,c'est vrai,c'est vrai.
00:50:56 :Et du coup,ça fait une belle découverte.Merci,ça fait plaisir.Tu n'es pas le seul,et je me suis rendu...Oui,et je me suis rendu compte,du coup,qu'il y a plein de gensqui faisaient du Django,qui faisaient Django,et qui ne touchaient passouvent l'admin.
00:51:10 :Et du coup,ce genre de choses-là,une fois que j'ai faitdes vidéos dessus,on m'a dit,c'est trop cool,je ne savais pasqu'on pouvait faire ça.
00:51:18 :Mais en fait,l'admin,on peut fairetrop de trucs avec.Et,c'est vraimentIl y en a pleinqui vont faire des adminsen fait,dans le template.
00:51:29 :Et puis,c'est ce qui m'arrivede le faire des fois.Mais maintenant,j'ai plus tendanceà customiser à fond l'admincomme ça,et à laisser l'admindans l'admin.
00:51:38 :Comme ça,les utilisateurs,les administrateurs,ils vont dans l'admin.Puis voilà.Si elle est bien customisée,après elle est pratique.OK.Donc,voilà.Je ne sais passi il y a des questions.
00:51:50 :Donc,voilà.Je ne sais pasApparemment,non.Oui,elles sont venuesau fur et à mesure.Oui,oui.Non,mais en tout cas,voilà,ça vous sera gérablepour le projet de stocknormalement.
00:52:07 :Oui.Et Bakary,je ne sais pas si c'est peut-êtreune erreur,mais vu que tu avais une mainlevée,tu n'as pas de questionsdu coup.
Aucune occurrence trouvée pour « ».