Bonjour à tout le monde
je débute mon autoformation à Django avec une petite application nécessaire pour moi, la gestion de ma collection de pièces Euros...
Non pas quelle soit fabuleuse, c'est juste un prétexte pour ne pas utiliser un tableur
j initialise ma base de données de la manière suivante :
J'ai un fichier texte pour les pays emeteurs que je parcous au moyens d'une boucle
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 class Pays_Emetteur(models.Model): nom = models.CharField(max_length=30) nom_long = models.CharField(max_length=50) image_petit_drapeau = models.CharField(max_length=50) image_grand_drapeau = models.CharField(max_length=50) class Pieces_Commemoratives(models.Model): pays_emetteur = models.ForeignKey(Pays_Emetteur,on_delete=models.CASCADE) resume =models.CharField(max_length=100) image = models.CharField(max_length=50) description = models.CharField(max_length=500) graveur = models.CharField(max_length=50)
les donnees arrivent dans la table
Pour les pieces commemoratives, jutilise ensuite un fichier csv avec les infos suivantes que je le parcous au moyens d'une boucle
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 sqlite> select * from init_pays_emetteur; 0|Allemagne|la République fédérale d'Allemagne|| 1|Autriche|la république d'Autriche|| 2|Belgique|le royaume de Belgique|| 3|Espagne|le royaume d'Espagne|| 4|Finlande|la république de Finlande|| 5|France|la République française || .....
Le parcours du fichier se fait bien. mon problème se situe au niveau de la relation entre la classe Pieces_Commemoratives et Pays_Emetteur pour l 'enregistrement des données de la table Pieces_Commemoratives, je ne comprends pas comment faire. Comment lui dire, pour telle piece, d'aller chercher l 'id du pays deja stocké dans la table Pays_Emetteur. J'ai essayé plein de choses, filter, etc...mais çà ne fonctionne pas
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Finlande ;Élargissement de l'Union européenne à dix nouveaux États membres ;2 euros commémorative Finlande 2004.png;Cette pièce est la première pièce commémorative de 2 émise par la Finlande. Le dessin représente un pilier stylisé dont les pousses tendent vers le haut. Les pousses représentent l'élargissement de l'Union européenne. Le pilier représente le fondement de la croissance. Les lettres EU apparaissent près du pilier, tandis que le millésime 2004 est inscrit dans la partie supérieure de la pièce, interrompant les douze étoiles du drapeau européen, placées sur l'anneau externe de la pièce. ;Pertti Mäkinen ;Edge finland s01.jpg ;Juin 2004 ;1000 000 Grèce ;Jeux olympiques d'Athènes de 2004; ;2E 2004 Grece JO.png ;Cette pièce est la première pièce commémorative de 2 émise par la Grèce et la toute première émise tous pays confondus. Le dessin d'une statue antique représentant un discobole sur le point de lancer le disque. Les cinq anneaux olympiques, au-dessus desquels on peut lire la légende en anglais ATHENS 2004 (Athènes 2004), sont représentés à gauche, tandis que le chiffre 2 et le mot ΕΥΡΩ (euro) se trouvent à droite. L'anneau externe de la pièce comporte les douze étoiles du drapeau européen, ainsi que le millésime entrecoupé par l'étoile la plus basse, de la manière suivante : 20*04.;Konstantinos Kazakos ;Edge greece s01.jpg ;Mars 2004 ;4000000 ....
Si je laisse tel quel, j'ai une erreur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 Tab = Rempli_Tab_Pieces_2E_Comm("init/static/2004.txt") i = 0 for ligne in Tab: print(ligne) ligne_de_travail = ligne.split(";") pays_emmeteur = ligne_de_travail[0] #p=Pays_Emetteur.objects.filter(nom=pays_emmeteur) #print(p) #print(type(p)) resume = ligne_de_travail[1] image_recto = ligne_de_travail[2] piece = Pieces_Commemoratives(i) PAYS_EMETTEUR = Pays_Emetteur(nom=pays_emmeteur) #PAYS_EMETTEUR.save() piece.pays_emetteur = PAYS_EMETTEUR piece.resume = resume piece.image = image_recto piece.save() i += 1
si j’enlève le # devant #PAYS_EMETTEUR.save(), il me crée des doublons dans la table pays, et créé une relation entre les tables, mais ce n'est pas ce que je veux
Code : Sélectionner tout - Visualiser dans une fenêtre à part ValueError: save() prohibited to prevent data loss due to unsaved related object 'pays_emetteur'.
alors que
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 #table Pieces Commemoratives apres import fichier 2004.txt 3|50e anniversaire du Programme alimentaire mondial |2E 2004 Italie ProgAlimentaire.png |||22 <==Je voudrais avoir 7 ici
J'espere que vous avez pu comprendre où se situe mon probleme, et d'avance, je vous remercie.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 #table Pays_Emetteur apres import fichier 2004.txt 7|Italie|la République italienne|| <== Issue de la premiere boucle, le parcours du fichier des pays .... 22|Italie ||| <==Issue de la deuxieme boucle, le parcours du fichier des pieces, je n'en VEUX PAS DE CETTE LIGNE
Le code est pas terrible, je sais...
Olivier
Partager