Session du 05 juin 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 parler de Django import/export
00:00:00 :Bon, je commence l'enregistrement.Bon du coup, rebonsoir à tout le monde.Je n'ai pas dit bonsoir, mais vraiment c'est bon.Est-ce qu'il y en a ici qui ont déjà fait du Django Import-Export ?
00:00:15 :Pas du tout.C'est-à-dire Import-Export.Ok, je vais être plus précis.T'as raison.On ne va pas parler de Fikidon.Je ne parle pas de l'AuthData et d'MData.
00:00:25 :Je parle vraiment de la librairie Django Import-Export.Alors bon, moi j'aime bien ça parce que dans mon ancien métier que j'ai quitté il y a à peine deux mois,j'étais contrôleur de gestion.
00:00:37 :Et on travaillait beaucoup sur Excel.Et notamment à mon magasin, on travaillait sur des bases de données.Et on extrayait la base de données sur Excel.
00:00:49 :Et on bossait dessus comme ça.Et du coup, j'étais vraiment très habitué à l'Excel.Je travaillais qu'avec ça.Avant c'était vraiment mon métier.Et donc là on va voir comment exporter sa base de données Django facilement sur Excel.
00:01:10 :Parce qu'il y a des petites subtilités qui sont un peu chiantes à trouver quand on ne connaît pas au début,quand on veut utiliser Django Import-Export.
00:01:16 :Je ne suis pas un expert du tout de Django Import-Export,mais je vais vous montrer déjà tout ce que je sais et ça suffira.Franchement, vous pourrez déjà faire pas mal de choses.
00:01:25 :Voilà, donc j'ai une super application vide.J'aurais pu préparer des tests quand même, c'est un peu abusé.Mais on va faire comme ça.J'ai eu des messages dans le...
00:01:33 :Ah c'est William de tout à l'heure, ok.N'hésitez pas à me couper la parole directe parce que je n'ai pas forcément mon écran Google Meet.
00:01:39 :Ça ne me dérange pas.Du coup, on va se créer une application.Une application, ça se traite bien de tout ce qui est stock de produits, les prix, les ventes, tout ça.
00:01:54 :Donc on va l'appeler Stock.Je vais baisser un peu ça.Regardez mon code, est-ce que c'est assez grand là ou pas ?Vous l'avez agrandi un peu ?
00:02:04 :Ça va pour moi.Ça va.Si vraiment ça fait trop petit, vous le dites, n'hésitez pas.Je pense que là c'est...Ok, tant mieux.Donc j'ai ajouté une application.
00:02:16 :On va enlever le copyright pour l'instant parce que ça va me saouler quand il y a trop de trucs qui se mettent là.Installer là.
00:02:23 :Donc j'ai mon application Stock que je mets ici.Voilà.Hop.Et maintenant, elle est prise en compte.Donc le dossier Project n'y touche plus.On va commencer par faire du coup des modèles.
00:02:39 :Comme ça c'est pour ceux qui sont plein dans le Django,qui commencent et qui ne sont pas habitués.Donc ils vont pouvoir faire des modèles en même temps.
00:02:45 :Donc les modèles qui vont représenter en fait notre base de données.Donc je vais faire une classe magasin qui va être toute simple.Donc modèle sur modèle.
00:02:57 :Hop.Et on va juste mettre le magasin.Il aura juste un nom.Je suis désolé.On va juste mettre un nom.Ce n'est pas le but de...
00:03:04 :On ne va pas être plein de données non plus.Après on va faire une classe produit, il y aura plus de choses.On va mettre un car fil.
00:03:09 :Voilà.On va le mettre un max len dans la norme.C'est 250.On va mettre 100.On s'en fiche.150 sera suffisant.On va mettre un unique à sous.
00:03:18 :Vous allez voir pourquoi.Ça a toute son importance.Je vous montre ma petite idée à la tête.Et maintenant, on va se faire redessiner la méthode calling ici.
00:03:31 :Et on va retourner...C'est trop compliqué quelque chose.On va retourner le nom du magasin.Voilà.Et en classe méta, s'il y a un truc de Django qui vous gêne, vous le dites.
00:03:42 :On peut en parler en même temps.Si ça, ça ne vous parle pas, vous me le dites.Le verbe with name, tout ça.Tout le monde est bon ?
00:03:51 :Non, ça je n'ai pas vu.Ok.Je vais le montrer après.De toute façon, gros, sans montrer encore l'administration,parce que je l'entrerai après.S'il n'y a pas ça, dans l'administration,ça sera des noms bizarres.
00:04:06 :Object 1, Object 2, ce genre de choses-là.Et donc, en fait, ça, dans l'administration,ça permet de dire, en gros, quand tu vas arriver,tu vas avoir magasin avec un S,parce qu'automatiquement, Django va te rajouter un S au bout du singulier.
00:04:18 :Et voilà.Donc après, pour le singulier, ça sera écrit magasin.Maintenant, tu m'as dit que...Je vois.Voilà.Et tes instances, elles seront affichées avec le nom du magasin.
00:04:32 :Tu n'auras pas genre Object 1, Object 2.Carrefour lit, carrefour machin, tu vois.Voilà.Qu'est-ce que je vais dire ?Bon, on ne va pas s'embêter à faire ça.
00:04:44 :Ce n'est pas le but.On ne va pas faire un truc comme ça.On va aller au plus court pour les modèles.On va juste en faire pour que ce soit assez sympa.
00:04:52 :Une place produit.Allez.Tac.Et qu'est-ce qu'on va mettre ?On va mettre un nom de produit.On va utiliser un carrefield ici.On va lui mettre un max de...
00:05:08 :On s'en fout.Le produit, on va lui mettre un...Pareil, on va avoir un nom unique.Ça me paraît plus logique.Le price.Hop.Alors, on va utiliser un decimal field.
00:05:25 :On va mettre un decimal field ici.Il est très précis.Comme ça, il n'y aura au maximum que 10 chiffres.Ça fait déjà beaucoup, mais c'est pour montrer un peu le paramètre.
00:05:38 :Et decimal place...Derrière.Ensuite, on peut avoir le stock du produit.C'est très simplifié, ce que je fais.C'est très court, mais c'est vraiment pour l'insport-export.
00:05:53 :Il existe ici des positifs intégrefield.Comme ça, on n'aura pas de négatifs.Ce n'est pas possible.Et puis, qu'est-ce que j'aurais pu rajouter ?Forcément, pour montrer un peu l'intérêt d'un import-export,pour montrer à quel point c'est puissant,on va avoir ici, je vous laisse deviner,une foreign key vers le magasin.
00:06:18 :Et puis, on va se dire que si le magasin est supprimé,on va supprimer le produit avec.Qu'est-ce qu'il faudrait rajouter d'autre ?Ça, je le mets toujours, c'est important.
00:06:36 :La relation inverse.Tout le monde sait ce que c'est la relation inverse ?Oui.OK.Bon, ça me paraît pas mal.On va se mettre une petite méthode.
00:06:52 :str.On va se remettre le self.name, c'était très bien.On va faire comme avec le magasin.Voilà.Et une classe méta.Et on va se mettre en...
00:07:07 :C'est quoi ces produits ?J'ai déjà mis mes classes en français.Moi, j'aurais fait ce que je fais en anglais.Normal, je respecte un peu la convention.
00:07:18 :Mais sinon, j'aurais fait ça.Produits.Et ça, je l'aurais laissé en anglais.Je l'aurais mis en français, ici.C'est pas mal, déjà.Là, on a deux modèles.
00:07:29 :On va se faire une migration de base de données, déjà.Make migration.Migrate.Tout est fait.Maintenant, on va se créer un super utilisateur.Create super user.
00:07:49 :Je vais prendre l'un de ceux d'habituel.Franchement, l'adresse mail, on s'en fout un peu.Voilà.On est prêt à attaquer le module import-export.Est-ce que j'ai un lien, déjà ?
00:08:10 :Voilà.Voilà.Donc, c'est Django import-export.Tac.Voilà.Donc là, on a Django import-export, cette librairie-là.On enlève, on va montrer à quoi ça ressemble.C'est assez balèze.
00:08:36 :Il y a quand même beaucoup de choses.Quand vous commencez à regarder ce qui est avancé,il y a quand même beaucoup de choses à voir.
00:08:43 :La documentation est assez lourde.Il y a plein de choses, donc tant mieux.Mais c'est pour ça que je vais vous montrer un peules choses qui sont considérées comme avancées,mais que j'aime bien utiliser de manière basique.
00:08:57 :Voilà.Comme ça, au moins, ça vous donne des bases sur plein de chosesavec l'import-export.Après, si vous voulez voir la doc, il y a plus de choses.
00:09:05 :Donc, si je retourne là, je commence par quoi ?OK, c'est parti.On va se faire un run-server.Est-ce que c'est génial ?Pourquoi il m'ouvre un nouveau...
00:09:21 :J'ai déjà un navigateur ici.Et donc là, on va aller sur admin.Et forcément, ça n'ira pas puisque je n'ai pas encoredéfini mon administration et qu'il n'y a rien qui va apparaître.
00:09:34 :Donc, on va d'abord faire ça.Hop, hop.On va importer le modèle, déjà.On importe.On avait quoi ?C'était magasin et product, produit.Voilà.
00:09:48 :Donc, de manière basique, quand vous êtes dans l'administration.OK.Point registre, ici.Donc là, on va avoir magasin.Hop.Et on va mettre produit.Comme ça.
00:10:04 :Tac, tac.Donc là.Voilà.On va se connecter.Donc là, j'ai bien magasin et produit.Donc, maintenant, quand je vais ici,je peux juste ajouter un produit.
00:10:20 :Donc là, ce qu'on va faire, c'est qu'on va s'ajouterdeux magasins pour les derniers tests.On va avoir Carrefour Beauvais.J'en avais déjà fait sur d'autres essais.
00:10:27 :Voilà.Je ne vais pas faire un Carrefour Lille.On ne peut pas ?Non, on ne peut pas.On va mettre deux magasins.Ça ira.
00:10:36 :On va se créer quelques produits.Bon, j'aurais pu faire une boucle d'enchaînement.Mais bon, voilà.Pour ce qu'il y a, on va se faire trois produits.
00:10:42 :Ça ira.Donc ça, c'est ma vraie application qui est en production.D'ailleurs, ça fait ketchup.J'en avais pris.On va dire que ça coûte 3 euros.
00:10:48 :On va en prendre trois en stock.Magasin Carrefour Beauvais.Hop.Ensuite, on veut quoi ?On veut de la...On va rester sur les sauces.
00:10:55 :De la mayo.Hop.Prix.Deux.Ça.Stock cinq.Un à Lille.Et un petit dernier.On va avoir...Je ne sais pas.Quelqu'un a une idée, là ?
00:11:06 :Hum.Hop.Des bonbons Lutti.Prix.Six.Stock.399.Magasin.On en met 20 à Beauvais.Voilà.Donc là, comme ça, on a trois produits.Dans notre base de données, ce n'est pas beaucoup.
00:11:18 :Mais pour l'exemple, ça suffit.Donc, le but avec l'import-export, en fait, c'est d'aller ici, de s'afficher, en fait,un petit widget, un petit bouton.Pour pouvoir...
00:11:22 :Je ne sais pas.Vous allez voir qu'en fait, on peut carrément importer des données depuis un fichier Excel.Et populer la base de données depuis un fichier Excel.
00:11:43 :Donc, moi, quand j'utilisais, j'ai toujours fait en sorte de ne pas faire d'erreur.Donc, mes colonnes, je n'ai jamais eu de problème de nom.Donc, si vous le faites mal, vous pouvez avoir des erreurs.
00:11:54 :Donc, on va regarder comment ça marche.Donc là, basique.OK.On revient là.L'installation, c'est...J'imagine que c'est import-export.Voilà.Il est là.Hop.On va installer ça.
00:12:11 :Et je vais vous montrer, du coup, une petite technique pour avoir plus de choses.On va installer l'import-export.Il faut aller mettre, voilà, dans les applications, ici, import-export.
00:12:20 :Hop.Euh...Ça, pour l'instant, on va le couper.Il est où ?Project.Settings.Install Adapt.OK.Hop.Hop.Voilà.Comme ça, ça sera reconnu.
00:12:36 :Donc là, on l'a mis dans l'application.Alors maintenant, là, on va attaquer un peu dans le vif du sujet.Tout va se passer dans le fichier admin.py.
00:12:47 :Donc là, en fait, on va casser ce qu'on a fait.Et on va recommencer.Donc, en gros, on va avoir besoin de nos modèles.Ça, il n'y a pas de problème.
00:12:55 :Admin, si on veut se servir, parce qu'on ne va pas faire de l'export sur tout.OK.On va faire un import.Du coup, on va avoir besoin de plusieurs choses.
00:13:02 :Alors, on import-export maintenant.On va se dire, on va importer, ici, les ressources.Hop.Très important, les ressources.Et fields.Donc là, ça va nous permettre de faire des choses plus avancées.
00:13:19 :Mais c'est tellement indispensable.Et aussi, on va faire un import-export.widget qu'on va utiliser avec fields.Et on va porter, est-ce qu'on a une foreign key, ici ?
00:13:33 :Donc, on va prendre la foreign key widget.Donc, ça, pareil, c'est un truc qui est avancé.Mais pour moi, ça me paraît indispensable.Et pour avoir du basic, on va faire vraiment la base de tout.
00:13:44 :Ça va être from import-export admin.On va importer, je crois que c'est import-export.J'ai import-export modèle admin, quelque part, ou pas ?Ouais, là.Voilà.
00:13:59 :Donc, en gros, c'est ce qui va nous remplacer, ici, notre admin.On va dire, l'admin, ici, remplace ça, en gros.On va utiliser plutôt le module d'import-export.
00:14:08 :Alors, pour commencer, par où je vais commencer ?Je vais essayer d'aller au plus…Il n'y a pas tant de code que ça, mais c'est dans les explications.
00:14:21 :Je vais essayer d'être au plus court possible,de ne pas compliquer la vie pour ne pas embrouiller un peu le truc.OK.Donc, les magasins s'en fichent de l'affichage d'illustration.
00:14:35 :On ne va pas l'afficher.Ça, ce n'est pas très grave.On va rester propre, quand même.Donc, on peut très bien se dire, déjà, avoir une petite classe, ici,une petite classe magasin.
00:14:45 :Donc, hop, on va utiliser un décorateur,parce qu'on va avoir notre magasin, ici.Mais on va personnaliser un petit peu la classe.Donc, on va avoir le magasin admin.
00:14:58 :On peut mettre admin dans le décorateur.Il y a une petite coquille.Adline.C'était pour mettre du style, un petit peu.Merci.Donc, là, je refais pareil.
00:15:10 :Admin, point, modèle admin.Voilà.Donc, là, j'ai redéfini une classe pour mon magasin,pour l'illustration.Et vous connaissez tous ça, le liste display.J'ai déjà fait un mentorat, il y a longtemps,mais je ne sais pas si vous vous souvenez.
00:15:24 :Oui.OK.OK.Liste display.On va se faire un petit moteur de recherche.Voilà.Très basique.OK.Maintenant...Non.Ce n'est pas ce que je voulais faire.
00:15:41 :Si je suis ici dans le magasin...Bon, ça ne change rien parce qu'on n'a que le name,mais on a un petit moteur de recherche.
00:15:47 :Ils fonctionnent.Bon, pour deux instances, on s'en fout, mais voilà.C'était juste pour le fun de l'avoir.Ça, c'est bien.Maintenant, on va utiliser, du coup...
00:16:00 :On va commencer par faire à peu près pareil, du coup,pour les produits.Donc, ce qu'on va faire...OK.On va commencer ici.Pour les produits, du coup, c'est ici qu'on va s'intéresserà l'import-export.
00:16:11 :Donc, déjà, on va partir un peu de la même façon.OK.On va se faire un moteur de registre et on va utiliser Produce.Voilà.
00:16:20 :Et là, on va se faire une classe qu'on va appeler Produit Admin.Il est où ?Produit Admin.Et maintenant, on va hériter, du coup, de l'import-export.
00:16:31 :Ici.Voilà.Donc, déjà, là, ça change presque tout.Donc, je suis quasiment sûr que ça, ça doit hériter de Modèle Admin,de toute façon, j'imagine.
00:16:45 :Voilà.On hérite des Modèles Admin, ici, de Django, ici.On doit l'importer un peu plus haut.C'est intéressant de voir un peu comment ça marche, des fois,tous les imports.
00:16:55 :Quand on import Admin Message, voilà, il y a un peu tout ici.Donc, on voit tout.Ici, il s'arrête en dessous de Django.Et donc, on va avoir des attributs identiques.
00:17:04 :Donc, par exemple, on peut très bien se dire les displays.Tout pareil.Donc, là, on va se dire, on va avoir quoi ?On avait le nom du produit.
00:17:13 :On avait le price, le stock et le magasin.On va rester ça.Price, stock, magasin.Voilà.Et on pourrait très bien dire, encore, se faire un search filter, ici.
00:17:29 :On va se mettre ici juste un name.C'est juste pour avoir un peu de consistance,mais bon, on va pas se servir en soi.Et une liste filter.
00:17:38 :Comme ça, je pourrais peut-être vous montrer au passage.Ici, tac.Et magasin, on va se prendre.On va prendre la liste filter.Voilà, tac.Donc, là, c'est pas mal.
00:17:48 :Donc, là, du coup, en soi, ça ne sert à rien,puisqu'on fait juste utiliser, dans l'héritage,utiliser que ce qui est dans Model Admin.Je vais vérifier que je n'ai pas de problème, déjà.
00:17:58 :Je vais recharger ça.Produit.OK, tout apparaît.Donc, j'ai bien mon petit filtre.En ce moment, c'est juste pour le fun.Voilà.Donc, pour l'instant, ça fonctionne,mais on n'apporte rien de plus.
00:18:08 :Là, où ça va être super important, maintenant,ce qu'on va faire, c'est avec ce qu'ils appellent,dans Ressources, ici, ce qu'ils appellent Model Ressources.Donc, vous allez voir.
00:18:19 :C'est là que ça commence à être intéressant.Donc, on a les produits, le magasin.OK.OK.Allez.Donc, là, on va définir une nouvelle classe.
00:18:29 :Une nouvelle classe qu'on va appeler Produits Ressources.Comme ça.Je n'aime pas.J'ai commencé à moitié en anglais.Bref, comme ça.On va l'appeler comme ça.
00:18:43 :C'est bien.Je n'aime pas.J'aurais dû le faire en anglais, au début.Bon, ce n'est pas grave.C'est pour le mentorat.Donc, Produits Ressources, ici.
00:18:52 :Et on va hériter, si vous vous souvenez bien,on a importé ça tout à l'heure.Alors, je ne sais plus si c'est Model Ressources.Je crois qu'il est là.
00:18:59 :Model Ressources.Et ça va nous permettre de faire plein de choses.Donc, déjà, de manière basique,en fait, ce que vous pouvez faire avec ça,c'est juste une classe méta.
00:19:11 :Ici, une classe méta.Le modèle que vous voulez spécifier.Donc, là, Produits.Et ensuite, vous allez avoir, ici.Alors, en fait, c'est vraiment les deux chosesqu'il faut absolument.
00:19:24 :Les champs, pour contrôler les champsque vous voulez importer, exporter.Donc, là, vous allez avoir Name.On avait quoi ?On avait Name, Price.Je les ai en dessous, de toute façon.
00:19:36 :Price, Name, Price, Stock, Magasin.OK.Donc, maintenant, c'est parti.Ça va être plus rigolo.Donc, on est là.On revient.Produits.Je pense que je n'ai rien oublié.
00:19:53 :Produits.Donc, là, on a notre import-export qui apparaît.Alors, surtout, ceux qui sont en production,si vous installez Model Admin,n'oubliez pas de faire un collecte statique.
00:20:03 :Parce que sinon, vous n'aurez pas vos petits widgets,je crois, ici.Donc, voilà.Donc, là, on peut faire un import-export.Là, on peut faire un export.
00:20:12 :Sauf que dans l'export,si vous regardez bien,on n'a pas...Alors, moi, c'est parce que j'adore Excel.Le problème, c'est qu'il n'y a pas Excel ici.
00:20:19 :Donc, la petite technique,si vous voulez avoir Excel,c'est que vous retournez dans votre...Ici.Et vous installez...OpenPyExcel.Alors, ça, c'est super puissant.J'en suis servi, moi, pour mon ancien boulot,pour faire des trucs de malade avec Python.
00:20:39 :J'avais couplé ça à Streamlitet à Difflib pour faire de la fusie search.Et c'était vachement bien.Donc, là, j'ai mon OpenPyExcel.Hop là.Run serveur.
00:20:51 :OK.Donc, maintenant, on est là.J'ai Excel qui apparaît.Voilà.Comme ça, j'ai mon Excel.Donc, on va déjà s'exporter nos produits ici.Hop.Voilà.
00:21:11 :Donc, là, c'est un peu petit.Je ne sais pas comment...Alors, sur Mac,là, ici.Donc, là, vous voyez, j'ai bien mes trois produits.Et...
00:21:22 :Il m'a emmerdé.Et donc, vous voyez, par contre,le magasin, j'ai des clés étrangères.Donc, je ne sais pas si ça vous convient,mais, perso, moi, quand je bossais sur Excel,les clés étrangères, je m'en fichais un petit peu,on va dire.
00:21:36 :Donc, le but, ici,ça va être d'afficher, en fait, le nom du magasin.Est-ce que, pour l'instant, ça va ?Oui.Est-ce que, pour l'instant, ça vous plaît ?
00:21:49 :Oui.Excellent.OK.Très bien.OK.Donc, là, on a fait notre premier rapport sur Excel.Maintenant, on va pousser un peu le truc.On va s'amuser...
00:22:00 :Ah, merde.Je suis là.On va s'amuser...Il est où, mes files ?Ici.Donc, le magasin,on avait dit qu'il avait un nom.Name.
00:22:09 :Hop.Il avait un name.Je reviens ici.Produit.Je vais recharger l'exprès.Je ne suis pas sûr.Export.Je vais revenir là.Je pense que tout le monde me voit venir.
00:22:25 :Et ça ne marche pas.J'ai ouvert le bon.OK.C'est bon.J'ai compris pourquoi.J'ai compris pourquoi.Je pensais qu'on pouvait le faire comme ça,mais non.
00:22:37 :Donc, d'où l'intérêt, du coup,de ce que je vais vous montrer maintenant.Magasin.Magasin.Il s'appelait bien Name.Donc, c'est qu'on ne peut pas le faire comme ça, alors.
00:22:45 :Magasin.Name.Donc, on ne peut pas le faire comme ça, je pense.C'est bizarre.Il me semble que j'avais déjà réussi.Bon.Dans tous les cas,si vous arrivez à l'afficher ici,le nom du magasin directement,ne le faites pas.
00:22:55 :Parce qu'il y a une chose qui est vachement puissanteet, pour moi,qui me paraît indispensable.C'est qu'on va redéfinir un attribut dans notre classe.
00:23:04 :Ici.Magasin.Magasin.Qui va correspondre au champ que vous avez ici.OK.Ouais, c'est ça, magasin.OK.On va le redéfinir ici.Alors, ça paraît un peu compliqué,mais c'est comme ça que ça fonctionne.
00:23:17 :Et c'est tellement puissantque ça ne dérange pas que ce soit un peu compliqué à faire.Donc là,c'est Fields.Fields.Donc là, on utilise ce qu'on avait importé ici.
00:23:26 :Fields.Alors.Donc, notre champ magasin,qu'est-ce qu'on va faire ?Donc, quand on va faire de l'import-export,on va lui dire quela column name ici,on va l'appeler, je ne sais pas,on va l'appeler magasin name.
00:23:40 :Comme ça, c'est parlant.Tac.On va avoir magasin name.Que je ne me trompe pas.Ensuite, on va avoir l'attribut.OK.Je crois que c'est l'attribut.
00:23:51 :C'est ça.On va avoir donc l'attribut magasin.Donc, c'est l'attribut du...du...de notre modèle.De notre modèle de produit.Donc, magasin.Et ensuite, il faut spécifier...
00:24:05 :Voilà.Donc là, c'est un peu...Un widget, en fait, ici.Et le widget que l'on va spécifier,ça va êtreRNK Widget.Et dedans, qu'est-ce qu'on va mettre ?
00:24:16 :La placemagasin.Le name.Et puis, c'est déjà pas mal.Je n'ai rien oublié.Et donc là, en fait, à quoi ça va servir ?
00:24:27 :Donc, en gros,maintenant,un port export, en fait,va être capable de gérerla relationfor RNK par le nom.Donc, par exemple,et si ça ne marche pas, je suis dégoûtéparce que j'ai déjà réussi à le faire,mais il n'y a pas de raison.
00:24:44 :Donc là, on va revenir ici.Déjà, il n'y a pas de bug.On va exporter et on va voir si ça fonctionne.Je peux nettoyer ma liste de...
00:24:52 :Comment on fait ? Je ne sais plus.Non. Bref, pas grave.Donc là,Excel.Donc là, j'ai le magasin.Normalement, il n'aurait pas besoin de me mettre comme ça.
00:25:01 :C'est bizarre.Bon, on va essayer. Ce n'est pas grave.On va voir s'il manque un truc.Et si je vis une pk,c'est que ce n'est pas bon ?
00:25:09 :Non, il y a un truc qui ne va pas.OK, il y a un truc qui ne va pas.Clairement pas.Qu'est-ce qui ne va pas dans mon fichier ?
00:25:15 :Alors, on va revenir dessus.Qu'est-ce qui ne va pas ici ?J'ai bien fait mes relations.Donc, magasin ici.J'ai mis un magasin.Tout à l'heure, ça aurait dû marcher ici.
00:25:28 :Donc, dans produits, j'ai quoi ?J'ai mes champs.Mes fields.J'ai bien...Name.J'ai bien fait comme ça, oui.Price.Stock.Magasin.Et ensuite, j'utilise quoi ?
00:25:41 :Est-ce qu'il ne faudrait pasque j'utilise magasin ici ?Non, je ne pense pas.Ça n'a pas d'impact.Dans modèle, j'ai quoi ?J'ai bien ici name, magasin.
00:25:50 :Hum.Contribute.Sur la doc, ils utilisent bien en tout casmagasin, underscore, underscore, name.Sur la doc d'import-export.Euh...Dans column name ici,ou ça, tu veux dire ?
00:26:09 :Dans le field, en fait,comme tu avais fait au début, mais...Ouais, ouais, c'est vrai.Normalement, ça aurait dû marcher comme ça.Alors, est-ce que...
00:26:16 :Mais je ne pense pas que ça joueraquelque chose dans le magasin.Mais on va le chercher,ce n'est pas grave.On va...Si je repasse ici,je ne pense pas qu'il faut celui...
00:26:25 :Ah non, c'est par rapport au modèle,donc pour moi, il n'y a aucun rapport du tout.Non, c'est sûr qu'il n'y a aucun rapport.Je...
00:26:32 :Je ne sais pas.Je retourne dans mon produit,je vais faire un export.Hop.Et normalement, il devrait apparaître ici,magasin, name, il me semble.
00:26:39 :Hum.Je vais regarder.Non, non, ce n'est pas ça.Ce n'est pas ça du tout.On aurait pu laisser la classe de base,ça n'aurait rien changé.
00:26:50 :Non, ce n'est pas grave.On va laisser celle-là pour l'instant.Hum.Attends, je suis un peu embêté que je retrouvece que je l'ai fait en plus,il n'y a pas longtemps.
00:26:57 :OK.Donc là, product.Hum.C'est mon import-export.J'ai mon modèle.Hum.Mon modèle.OK.Là, moi, j'ai bien rechargé à chaque fois.Oui, je l'ai rechargé.
00:27:11 :J'ai mon modèle.Oui.Voilà.Là, on est d'accord,je suis dans mon produit.Hum.Ah.Ah, mais voilà.OK, c'est bon, j'ai compris.OK.Je pense savoir ce que j'ai.
00:27:22 :Hum.On va commenter, ça, pour l'instant.Voilà.Mais je pense que j'ai compris.Non, ce n'est pas ce que je voulais faire.C'est quoi le raccourci, déjà,pour commenter en bloc, comme ça,le line comment ?
00:27:35 :Ouais.Hum.OK.En fait, quand vous faites ça,donc ici, on s'en fiche,on pourrait très bien remettre,on va laisser, alors on s'en fiche,mais on n'aura plus très bienlaissé admin,de toute façon, il n'y a aucun rapport.
00:27:48 :Il faut toujours penser, ici,à définir, en fait,ce qu'ils appellent une ressource.Une ressource classisée.Enfin, c'est une ressource,non, c'est une ressource classe.
00:27:56 :Je pense que c'est au singulier,je crois, ça doit être ça.Tac.Ici, ressource classe,et vous dites,produit,ressource.Voilà.Et pour moi, normalement,il n'y a pas de raison.
00:28:09 :Ici, on peut récupérer le name.Alors, hum.C'est Baptiste qui me parlait de la doc ?Euh, oui.Et dans la doc,ils utilisent quel type d'exemple,eux-mêmes ?
00:28:20 :Euh.Sur un livre, oui, oui.Ils utilisent...Un livre ?Ouais.De toute façon,ils utilisent aussi, du coup,produit et stock.Euh.Alors.Donc, là,on va retenter, du coup,run serveur.
00:28:34 :Hop là.Donc, produit.On exporte.Ah, ça me plaît, déjà, ça.Ça, ça me plaît.Voilà.Là, on a les noms des magasins.Je vais agrandir un peu.
00:28:51 :OK.Ça vous va ?C'est bon ?Je suis désolé.Voilà.J'ai galéré un peu.Euh.Donc, là,je récupère le nom des magasins.Les deux problèmes,c'est que...
00:29:04 :En fait,si vous faites ça comme ça,Django,import-export,va galérer à...va galérer à gérerles...les...la relation, en fait,la foreign key.
00:29:16 :Donc, moi,c'est ce que je disais.C'est que ça,je le laisse en magasin.Voilà.Ici,j'ai oubliéquel était le raccourci.Euh.C'était celui-là.
00:29:26 :OK.Ici,j'utilise ça.Voilà.Donc,on va cibler le champ magasin.On va...On va lui direqu'avec le foreign key widget,ici,on va, en fait,jouer sur le nom.
00:29:38 :Voilà.Et maintenant,si je relance,vous allez voir qu'en fait,il n'y a quasiment pas de différence,visuellement.Hop.Je me parfours de là.Export.
00:29:47 :Le champ magasin name.OK.On va se faire des petits tests,comme ça.Et lui,on va se garder ce fichier Excel.Donc, voilà.Donc là,en fait,je n'ai pas touché à mon fields.
00:29:59 :J'ai juste rajoutéavec mon foreign key widget.Et ça me permet d'aller chercher,euh,ben,quand même,les noms des magasins.Sauf que lui,import-export va être capablede gérer la clé étrangère.
00:30:09 :Parce que si vous essayez,après,en fait,d'importer des donnéesen modifiant,dans fields,le champ directementavec la clé lookup name,euh,ça peut poser,ça pose problème.
00:30:20 :Donc là,on va se garder ce fichier-là.Euh,pourquoi,qu'est-ce que je vais le refaire ?Bon,on va se le garder sur le bureau,je vais le mettre.
00:30:28 :OK.Donc là,on a exporté les données.Alors,ce que je voulais vous montrer,là,euh,c'est qu'on va pouvoir faireplusieurs choses.Euh,là,on a défini les champs,le modèle,du coup,on peut,euh,on peut faire quelque chose,en fait,pour éviter les doublons,ici.
00:30:48 :Donc ça,c'est assez intéressant.On va se faire import,euh,import ces ID fields,tac.Euh,si quelqu'un l'adopte sous les yeux,de temps en temps,et qu'il voit qu'il fait des fautes,il n'y a pas de problème.
00:30:59 :J'en suis quasiment sûr,c'est import ID fields,comme ça,et name.Exact.Donc là,en fait,ce qui se passe ici,euh,on va mettre une petite virguleaprès le moment,tac.
00:31:11 :Ce qui se passe ici,c'est que,en fait,le,quand vous allez faire de,comment dire,de l'import,Django,enfin,le module,en fait,va vérifiersi le nom du produit existe déjàpour éviter les doublons.
00:31:25 :Parce qu'imaginez que vous renvoyezà une autre ligne Excelavec un produit qui s'appelleKetchup,et que vous avez déjà un Ketchup,il va vous recréer.
00:31:31 :Bon,après,si le champ est en unique,il y aura des contraintes d'unicitéqui vont se déclencher,pas de problème.Mais on peut faire d'ici,en fait,en sorte que s'il y a déjàun Ketchup qui existe,eh bien,lui,il va juste mettre à jour,en fait,la,
00:31:46 :l'instance Ketchupqui existe déjà.Voilà.C'est bon, quoi.Il n'ajoute pas,par exemple,peut-être deux lignes Ketchup,il y en a un où il y en a deux,l'autre,il y en a trois,il n'ajoute pas,il remplace deux par trois.
00:31:58 :Ouais,il va remplacer,en fait,la ligne existante,en fait,Ketchup.S'il la trouve,s'il évoque qu'il y a déjàun nom Ketchup,il va juste aller modifierles données.
00:32:09 :Alors,par contre,je ne me suis jamais posépour,après,moi,ce que je fais,après,il faut bien réfléchirà son projet,parce qu'un truc comme ça,moi,c'est d'office,un produit,déjà,le name,il est où ?
00:32:26 :Le name,il va être unique.Voilà.Donc,normalement,il n'y a pas de problème,il est là.Le name,il est unique.Donc,voilà.Mais donc,vous pouvez,du coup,passer ici par,super intéressant aussi,on va se faire quelque chose,au niveau de la,comment dire,de la,
00:32:48 :l'efficacité,en fait,au niveau de l'efficacitéde leur opération,on peut très bien faire ça,et en fait,ce qui va se passer ici,c'est que,toutes les lignesqui ne sont pas touchées,eh bien,vont être ignorées,que sinon,si vous ne faites pas ça,en fait,tout va être réécrit
00:33:06 :en base de données,même si c'est la même chose,en fait,il va réécrire,ce flag,en fait,il sert à ça,c'est pour dire,si la ligne,ben,tu as déjà les donnéesque tu vas remplacerpar les mêmes,ben,ça ne sert à rien,ne fais pas quoi.
00:33:23 :Donc,vous pouvez mettre ça ici.Il y a autre chosequi est intéressante,on va faire un test après,skip,en fait,ici,ça vous permet,du coup,ici,vous allez,dans le rapport d'importation,vous allez inclure l'ignoré,comme ça,il vous dira,donc,si je reviens là,si je reviens là,
00:33:43 :hop,imaginez,je vais faire un,qu'est-ce qu'on va se faire,on va mettre un,un bonbon,je n'ai pas l'idée,un bonbon,un price à deux,un stock,bon,par défaut,là,zéro,on va se mettre un stock,ici,je vais remettreun des deux carrefours,voilà,et ça me paraît pas mal,
00:34:07 :hop,maintenant,si je reviens là,dans produit,dans produit,on va faire import,par ma Excel,tac,ok,donc,là,vous voyez,déjà,d'office,il va vous sortir un petit tableau,ici,et il va vous dire,en gros,ça,c'est passé,il ne va pas toucher,quoi,il va dire,
00:34:36 :par contre,on a un nouveau,un nouveau,et,zéro,et trois,trois,excellent,voilà,donc,ça,c'est quand même pas mal,après,je ne sais pas,si je le rouvre,je ne sais pas,que je vais faire ici,ketchup,ou bonbon,ah,il y a un truc,ouais,c'est génial,
00:35:02 :ouais,c'est génial,après,je ne suis pas un grossisateur,je,je n'utilise pas très souvent,mais,je pense qu'il mérite de,de creuser un peu le truc,parce que je pense qu'il y a des boîtes,que ça peut beaucoup intéresser,genre,lui,je vais dire,en fait,non,le stock,
00:35:22 :c'est six,ici,hop,tac,on va refaire un import,import,en Excel,et je vous montre autre chose aussi,voilà,et lui,il vous dit,par contre,hop,et donc là,il vous le dit,un updated,euh,donc il y a ça,donc déjà,ça,c'est une chose,euh,
00:35:46 :si vous manipulez déjà,euh,comment dire,ça,ce n'est pas des choses qui sont,qui,j'ai vu,qui ne présentaient pas certains adhocs de manière standard,et que c'est des choses plus avancées,mais pour moi,c'est vraiment indispensable,parce que si vous faites ici un name,en fait,après,
00:36:00 :dans les imports,il n'arrive pas,je ne sais pas,je vais galérer,il n'arrive pas,donc on redéfinit le champ,ici,on lui dit qu'on va utiliser le name,ici,voilà,et comme ça,il va rechercher par rapport au nom,et il va réussir à faire,en fait,à gérer sa,
00:36:15 :sa clé étrangère,je trouvais ça hyper balèze,les mecs qui développent ça,franchement,balèze quoi,euh,donc voilà,et il y a autre chose,que je voulais vous montrer,euh,21h40,bon,je vais terminer par ça,promis,euh,tout le monde,euh,tout le monde est à l'aise,ou pas,
00:36:34 :les permissions,ouais,ouais,ouais,ok,euh,ok,on va revenir rapidement,sur les permissions,juste,ce que j'avais promis,euh,rapidement,après,je crois que c'est un mentorat dessus,euh,c'est où,c'est là,euh,si je vais dans,utilisateur,voilà,ça,c'est moi,ok,donc,chaque,euh,on va voir mes deux modèles,
00:37:04 :ils sont,hop là,voilà,je galère,voilà,hop,donc,dans l'application,euh,tout à l'heure,on en parlait à la JC,donc,ici,donc,t'as l'application stock,j'ai le modèle magasin,modèle produit,de base,on a les permissions de base de Django,qui sont écrites à chaque fois,add,
00:37:25 :change,delete,view,euh,c'est les creds,euh,donc,on ne peut pas,comme permission,on ne peut faire que certaines choses,et il faut savoir que,du coup,dans les temps,dans les vues de Django,on peut vérifier,euh,que si,par exemple,on va dire,si l'utilisateur,euh,
00:37:46 :euh,a cette permission,ok,il peut accéder à cette vue-là,s'il ne l'a pas,eh bien,on le redirige,ou,euh,on l'envoie une 403,sachant qu'il est possible,ici,de créer ces permissions,euh,custom,je ne sais pas,euh,admin du magasin,ou,euh,je ne sais pas,
00:38:07 :magasinier,ou,enfin,on peut imaginer plein de choses.On peut imaginer plein de choses.Est-ce que ça va,pour l'instant,JC ?Oui.Donc,tu peux imaginer,tu peux créer toutes les permissions que tu veux,ici.
00:38:20 :Et après,tu les utilises comme tu veux,dans ton projet,dans tes vues de Django,tu dis,eh bien,si il a cette permission,il fait ça,ainsi de suite.
00:38:29 :Euh,je ne sais pas faire,euh,je ne peux pas faire,sauf que ça sera 118,voilà.Hop.OK.Donc,là,un utilisateur que vous avez comme ça,vous pouvez toujours lui donner,le,alors,status,c'est pour être comme vous,pour être admin,on peut juste lui dire,bah,
00:38:48 :tes staffs.On lui dit tes staffs,et on va lui donner,par exemple,je ne sais pas,euh,magasin,il va pouvoir faire quoi,euh,euh,euh,juste,voilà,par exemple,ouais,on va faire ça,on lui donne une permission,comme ça,hop,on va sauvegarder.
00:39:09 :Maintenant,je vais faire un logout,hop,et,euh,pour gagner du temps,j'ai mis le mot de passe,et donc,lui,il n'accède que,du coup,au magasin,et la seule chose qu'il peut faire,il ne peut pas aller,euh,il ne peut pas aller,du coup,modifier les instances,
00:39:27 :du coup,il ne peut pas aller ajouter,il peut juste aller ajouter,c'est tout.Dans l'administration,il ne peut pas faire que ça.Donc,en fait,ça joue,l'intérêt,c'est d'avoir ça pour les utilisateursqui sont du staff,et qui vont dans l'administration,mais pour les utilisateurs,après,qui sont dans,
00:39:43 :dans l'application,vous leur créez des permissions personnalisées,vous leur ajoutez celle qui existe,donc,des permissions personnalisées,et vous bridez l'accès aux vues,euh,en fonction des permissions qu'ils ont.
00:39:51 :Ensuite,et je vais revenir,du coup,parce que c'est,c'est par rapport au rapport à l'exportque je dis ça,mais vous allez voir pourquoi,euh,ensuite,toi,j'ai ici,tu peux dire,crée un groupe,mon groupe,il va s'appeler,je ne sais pas,fou,et dans mon groupe,
00:40:09 :je vais mettre plusieurs permissions,celle-là,tu vois,tu peux aller piquer un peu partout,et mettre,genre,bah,tu vas mettre que des,que des mecs qui peuvent ajoutersur ces deux modèles-là,hop.
00:40:20 :Les personnes qui ont ce groupe-là,du coup,elles peuvent ajouter sur les deux,les deux modèles,voilà.Et là,je suis parti sur,euh,ton mentorat du mois de novembreavec les custom users,ça marchera pareil ?
00:40:31 :Ouais,ouais,t'inquiète.D'accord,ok.Bah,tu,tu vas hériter de abstract user,donc,t'inquiète pas.Ok,ça marche.Tu refais bien ton,ton admin,comme,je crois que je le montre dans le mentorat,c'est indispensable,refais bien juste ton admin.py
00:40:49 :avec la classe,euh,dédiée à l'utilisateur,ton custom user.Ok.Non,tu vas te retrouver avec des mots de passe en clair et tout.Et ça va pas être cool.
00:40:59 :Donc,euh,on pourra parler si tu veux.Euh,ok,qu'est-ce que je voulais dire du coup,à la base,je sais plus.Ouais,donc,par rapport aux,aux,aux permissions,ici,dans les settings,donc,bon là,on va faire un truc léger,hein,je veux pas prendre le détail,
00:41:19 :mais vous allez comprendre le principe.Donc là,on aexport,euh,c'est export,donc là,il faut redire,donc je crois que c'est import,c'est ça,permission,code,voilà,c'est égal à,euh,add,voilà,et en fait,après,on a,alors,je voulais dire à quoi ça sert après,
00:41:41 :donc là,c'est pas import,euh,hop,donc là,on va toucher du coup,au export,et là,on va dire,euh,view,on va dire view,j'ai pas fait de faute,euh,non,j'ai pas fait de faute,et en fait,ici,ce qui va se passer,c'est quand vous faites ça,
00:42:01 :euh,pour les,quand vous utilisez vos constantes,comme ça,ça permet,en fait,de,en gros,si seul,voilà,on va le dire comme ça,seuls les utilisateursqui ont une permission addsur le modèle en question,donc,par exemple,sur notre modèle produit,et bien,ils peuventimporter les données,
00:42:21 :et seules les personnesqui ont la permissionviewpeuvent,euh,exporter les données,ici,par exemple.Mais après,vous pouvez,donc,redéfinir,c'est dans la doc,vous pouvez redéfinir plus de choseset customiser un peu tout ça,mais là,c'était juste pour avoirun,vraiment,un,comment dire,au moins une manière basique
00:42:43 :et juste pour aborder le sujet,mais une manière très légère.Donc là,par exemple,on avait mis addsur notre guide tout à l'heure,mais on l'a missur le groupe,euh,forcément,ça ne marche plus.
00:42:54 :Hop,ouais,il va bien,ok.Donc là,par exemple,si je retourne en administration,euh,on va aller,euh,pff,est-ce que ça va marcher,comment ça,comme ça,ouais,ok,donc là,ce qu'on va faire,notre utilisateur,il est là,c'est juste pour l'exemple,on va faire comme ça.
00:43:16 :Imaginez,ici,on va pouvoir laisser celle-là,on va dans produits,on lui donne la permission change,donc il n'est pas add du tout.Maintenant,je vais me reconnecter,hop,hop,il ne peut même plus mettre directement,ouais,bon,ce n'est pas grave,hop,et lui,il va aller sur les produits,
00:43:39 :donc il peut aller modifier les instances,par contre,il ne peut rien faire au niveau des imports et exports.Maintenant,si je reviens sur mon,je vais revenir avec lui,hop,je vais revenir sur mon utilisateur 118,là,et je vais faire autre chose,on va se dire,on va se dire ça,
00:43:53 :on va lui virer,on va lui mettre juste,sur produits,on va lui mettre add,ok,on va sauvegarder,on log out,on revient,hop,tac,voilà,donc là,ici,on l'a mis en add,voilà,par contre,s'il est en add,est-ce qu'il va pouvoir,non,maintenant,s'il a vu add,
00:44:22 :il faut que je lui donne une permission de vue aussi,bah oui,je suis bête,donc je retourne dessus,excusez-moi,j'ai réfléchi en même temps que l'accident m'a vu,on lui avait mis quoi,du coup,lui,je me suis un peu emmêlé,tac,il est là,il a add,
00:44:40 :ok,on va juste lui mettre,on va juste lui mettre view,voilà,c'est ce que je voulais faire à la base en plus,c'est génial,on perd un peu de temps,mais c'est pas grave,avec tous nos allers-retours,donc là,on revient là,hop,hop,hop,voilà,on est ici,
00:44:58 :il peut voir ses produits,ici,il peut les exporter,mais pas les importer,et vous avez deviné la suite,on va juste faire pour le seul,si je retourne ici,et on avait dit que pour les imports,c'était add,et qu'ici,je vais dans user,user,118,que je retourne en bas,
00:45:16 :et dans produits,que je lui mets add,bon là,vous avez déjà compris d'avance,mais c'est juste pour,pour le prouver,produit,maintenant,il peut faire son import-export,donc,là,t'es trompé de,de,de user,mais,t'es sur le 18,tu voulais le faire,là,t'es sur le 17,
00:45:39 :ah,excuse moi,et je l'ai mis sur lui,sinon,oui,ouais,j'ai mis sur lui,mais,excuse moi,je,désolé,j'ai,j'ai du oublier,un petit,voilà,je me suis mis avec le même,voilà,et normalement,il a un import-export,voilà,donc,vous voyez,ça,c'est la manière la plus basique,
00:46:03 :et la plus simple,en fait,de gérer les permissions avec import-export,mais après,vous pouvez carrément,en fait,si ça vous suffit,vous pouvez avoir ça,et,en deux lignes de code,en fait,vous gérez vos permissions de manière basique,donc,voilà,un peu,pour la librairie Django,import-export,
00:46:20 :c'est un peu tout ce que je voulais vous montrer,ça n'a pas été trop long,ça vous a plu,c'est bon ?Ah,génial,ouais,très bien,ouais,c'est top,c'est bien,donc,si c'est du moi,par exemple,ils vont pouvoir s'amuser avec,avec leurs produits,alors,ça se trouve bien au projet du mois,
00:46:39 :ça,je trouve,oui,voilà,donc,si vous vous amusez avec ça en plus,vous pouvez le mettre en place,ok,euh,donc,mais pensez un peu à tout ce que je vous ai dit,surtout,à tous ces,euh,pensez à OpenPyXL,quand vous l'installez,surtout,pour avoir l'excel,et pensez surtout à,
Aucune occurrence trouvée pour « ».