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 :

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)
J'ai un fichier texte pour les pays emeteurs que je parcous au moyens d'une boucle


les donnees arrivent dans la table
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 ||
.....
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
 
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
....
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
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 je laisse tel quel, j'ai une erreur

Code : Sélectionner tout - Visualiser dans une fenêtre à part
ValueError: save() prohibited to prevent data loss due to unsaved related object 'pays_emetteur'.
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
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
alors que

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
J'espere que vous avez pu comprendre où se situe mon probleme, et d'avance, je vous remercie.
Le code est pas terrible, je sais...
Olivier