- 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é
12 mars 2023 - 12 mars 2023 à 19:33
checkConversation résolue
2 réponses
Foreign key modèle Order
Bonjour,class Order(models.Model): # user peut avoir plusieurs order user = models.ForeignKey(AUTH_USER_MODEL, on_delete=models.CASCADE) # un seul product par order product = models.ForeignKey(Product, on_delete=models.CASCADE) quantity = models.IntegerField(default=1) ordered = models.BooleanField(default=False) def __str__(self): …
Christian Aucane
11 janvier 2023 - 11 janvier 2023 à 7:50
checkConversation résolue
9 réponses
Django ne crée pas mes migrations
Je ne comprend pas, j'ai ajouté mon modèle Order dans le fichier models.py et quand je fais la commande makemigrations il y a marqué "No changes detected"
00:00:00 :Le premier modèle qu'on va créer, c'est le modèle pour les articles.On va l'appeler Order, tout simplement, comme ceci.Il va hériter lui aussi de la classe de base Model.
00:00:09 :Et à l'intérieur de cette classe, on va créer les différents champs.Le premier, c'est le champ pour l'utilisateur.On va faire un champ de type Foreign Key.
00:00:17 :Foreign Key, c'est en fait une relation qu'on appelle plusieurs à un.Ça signifie tout simplement qu'on va avoir potentiellement plusieurs orders,donc plusieurs articles qui vont être reliés à un utilisateur.
00:00:29 :Puisqu'un utilisateur va pouvoir, par exemple, acheter une paire de chaussures, un tee-shirt, etc.Donc on aura un seul utilisateur, mais qui va être relié à plusieurs orders,donc à plusieurs articles ici.
00:00:39 :Donc on va devoir indiquer notre modèle utilisateur ici.On peut indiquer la variable que l'on a dans notre fichier de settings,qui est la variable AuthUserModel.
00:00:47 :Donc il va falloir l'importer.C'est cette fameuse variable qu'on avait créée dans le fichier de settings.Donc si je vous montre ici dans settings,on avait AuthUserModel qui allait pointer vers notre modèle personnalisé Shopper.
00:00:58 :Donc c'est ce modèle qu'on va devoir utiliser ici avec cette variable AuthUserModel.Donc je vais l'importer automatiquement avec PyCharm en faisant option entrée.Et import this name, vous voyez qu'il le trouve à l'intérieur de shop.settings,
00:01:11 :donc c'est bien celui-là.Ensuite on va devoir spécifier un paramètre supplémentaire.Vous êtes obligés de le spécifier, sinon Django va vous taper sur les doigts.
00:01:18 :Et c'est normal, puisqu'en fait on va devoir spécifierce qu'il se passe quand on supprime l'utilisateur.Donc quand on supprime l'instance auxquelles sont reliés ces articles,qu'est-ce qui se passe ?
00:01:29 :Est-ce qu'on supprime également ces articles ?Est-ce qu'on dit qu'en fait non, on va juste les garder dans la base de donnéesmais faire en sorte qu'ils ne soient plus reliés à un utilisateur ?
00:01:38 :Donc là c'est à vous de choisir.Et dans ce cas-ci, on va choisir dans mon cas de supprimer les articles.Je n'ai aucune raison de garder des articles comme ça qui ne sont attachés à personne.
00:01:46 :Si l'utilisateur choisit de supprimer son compte,je souhaite supprimer les éléments qui sont associés à son compte.Donc dans le hand delete, on va dire models.cascade comme ceci,
00:01:56 :sans les parenthèses, c'est vraiment juste models.cascade comme ceci,comme une variable.Et donc ça, ça permet de dire que, comme je vous disais,si l'utilisateur supprime son compte,on va supprimer en cascade tous les éléments qui sont reliés à cet utilisateur.
00:02:08 :Et donc dans ce cas-ci, les articles qu'il aurait pu avoir créés.Ensuite, on va relier cet article à un produit.Donc on va faire un champ qu'on va appeler product,qui va lui aussi être de type foreign key,puisqu'on peut avoir plusieurs produits qui sont reliés à plusieurs articles.
00:02:23 :Donc ce qu'on va dire, c'est qu'on souhaite dans ce cas-ci relier à product,qui est défini juste au-dessus, donc cette classe ici.Donc là, on n'a pas besoin d'importer quoi que ce soit,puisqu'il est défini juste au-dessus dans le fichier.
00:02:33 :Dans le hand delete, on va également faire un models.cascade,puisque si on supprime les produits,on souhaite également supprimer les articles qui sont associés.Ensuite, on va avoir des champs un peu plus simples.
00:02:45 :On va avoir la quantité, donc quantity.Je vais faire un integer field,avec une valeur par défaut qui dans ce cas-ci va être de 1,puisque quand on va créer un article, un ordre,on veut que par défaut, il puisse être au minimum à 1,pour pas que l'utilisateur puisse commander 0 articles.
00:03:01 :Ça n'aurait pas vraiment de sens.Et pour finir, on va faire un boolean, donc models.booleanField,qui lui va être par défaut à false,puisque par défaut, l'article n'aura pas été commandé.
00:03:12 :Donc voilà pour le order.On va en profiter tout de suite pour rajouter la méthode string,qui va nous permettre d'afficher un peu mieuxdans notre interface d'administration les modèles.
00:03:21 :Et on va retourner une chaîne de caractère.Donc je vais faire un fstring pour afficher le nom du produitauquel est associé cet article.Et également, on va mettre la quantité.
00:03:31 :Donc on va faire self.product.name.Et entre parenthèses, on va insérer la quantité avec self.quantity.Donc voilà pour l'article.On va l'enregistrer dans le fichier adminpour pouvoir le créer dans la base de donnéeset vérifier que tout est bon.
00:03:46 :Donc dans store ici, dans admin,je vais dupliquer cette ligne et enregistrer order.Et je vais l'importer également ici.Et il va falloir également,avant de pouvoir l'ajouter dans l'interface d'administration,créer les migrations.
00:03:59 :Donc on va faire python manage.py makeMigrations.Ça va créer donc une nouvelle migrationqu'on peut aller explorer si vous le souhaitez.Donc dans PageShop, dans migration ici dans le store,on a bien notre ordre ici qui dépend de la migration précédente.
00:04:14 :On va pouvoir créer cette information dans la base de données.Donc python manage.py migrate.Voilà, tout s'est bien déroulé.Et on va pouvoir maintenant aller voir dans l'interface d'administrationpour ajouter un élément.
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.