IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Django Python Discussion :

[Débutante (passionnée)] Entete détail le serpent qui se mord la queue


Sujet :

Django Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Nadinette
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2012
    Messages
    264
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2012
    Messages : 264
    Par défaut [Débutante (passionnée)] Entete détail le serpent qui se mord la queue
    Salut,
    Après plusieurs années dans un autre métier je reviens au dev et depuis j'ai adopté Python Django que j’adore.
    En ce moment je travaille sur un projet dans lequel j'ai
    Compétence
    +---------Sous compétence
    +---------Sous compétence
    +---------Sous compétence
    +---------Sous compétence

    J'ai créé un formulaire d'admin pour le model Personne et le model Competence.
    Le modèle compétence contient une clé externe vers Personne.

    J'aimerais que parmi mes compétences il y ait une compétence principale.

    J'ai mis un booléen isPrimary.

    Je n'arrive pas à le faire marcher.

    La classe mère fait référence à la fille et vice et versa à cause du reverse et du coup ça ne fonctionne jamais.
    Pourriez-vous m'aider ?
    Merci

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 752
    Par défaut
    Citation Envoyé par Nadinette Voir le message
    Pourriez-vous m'aider ?
    Vous avez d'abord un soucis coté modèle/schema de la base de données(*): 2 personnes peuvent avoir les mêmes compétences (primaires).
    La relation entre les 2 tables devrait être many-to-many (pour autant que ce soit une bonne idée).
    (*) Les rubriques et forum bases de données sont là pour ça. Dans un forum Django, vous êtes peut être débutant côté Django mais devez maîtriser des tas de technos avant de vous y aventurer.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 323
    Par défaut
    bonjour
    Citation Envoyé par Nadinette Voir le message
    il y ait une compétence principale.
    J'ai mis un booléen isPrimary.
    pas compris la logique, où est cet attribut ? dans Competence ?
    Il me semblerait plus logique (si j'ai compris) que cet "attribut"(dans ORM) soit lié à Personne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    pierre Back:
      - sql
      - python
    paul Front:
     - python
     - javascript
    Python n'est pas la compétence principale pour tous (pour Front, c'est js)
    la notion de "compétence principale" n'existe en fait que dans la liaison ? donc un champ dans la table intermédiaire.

    pour du many<->many il y a la doc

    Oui, ceci est sans doute plus pour le forum SQL (bien que l'orm masque tout)

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 752
    Par défaut
    Citation Envoyé par papajoker Voir le message
    Oui, ceci est sans doute plus pour le forum SQL (bien que l'orm masque tout)
    L'ORM opacifie un peu les choses mais définir schéma d'une base de données avant de fabriquer tables et relations "en dur" via un ORM (ou pas) ne change pas: on doit réfléchir avant de coder!

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre éclairé Avatar de Nadinette
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2012
    Messages
    264
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2012
    Messages : 264
    Par défaut
    Avant tout, merci pour ta participation.

    En SQL j'aurais mis un sort order et le primary skill aurait toujours été le premier. J'aurais réordonné les compétences si nécessaire.

    Ici, je n'ai pas tout bien compris mais bon...

    J'ai mis un booleen dans la compétence (je réaliste que je suis un cruche)...

    J'ai oublié de dire que la compétence est en fait une jointure entre la personne et sa compétence et qu'elle a entre autres un champ primary.

    Disons que c'est une relation many to many.

    C'est plus clair ?

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 752
    Par défaut
    Citation Envoyé par Nadinette Voir le message
    C'est plus clair ?
    Si vous aviez fait "tout bien", ça devrait marcher...
    Problème avec Django, c'est qu'il y a des tas de choses à transmettre pour pouvoir reproduire quelque chose... à défaut de montrer/expliquer ce qui concerne le problème qu'on essaie de décrire (c'est pour ça que c'est difficile de débuter en tout en commençant avec Django).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 323
    Par défaut
    Citation Envoyé par Nadinette Voir le message
    J'ai oublié de dire que la compétence est en fait une jointure entre la personne et sa compétence et qu'elle a entre autres un champ primary.
    C'est plus clair ?
    pas vraiment une competence est une jointure entre une personne et une compétence ???

    Comme écrit plus haut, il faudrait déjà valider le modèle dans le forum BD
    Je suppose que tu n'es pas débutant puisque les BD n'ont pas changé depuis 10 ans

    Citation Envoyé par Nadinette Voir le message
    La classe mère fait référence à la fille et vice et versa à cause du reverse et du coup ça ne fonctionne jamais.
    Il faut être clair, ici je n'ai aucune idée de quel est la mère et la fille ... et cela ressemble bien à une arborescence de compétences (récursivité)

    si il n'y a pas de sous-compétences (une arbo dans les compétences comme ton schéma #1) ? moi, je vois sans trop réfléchir une chose simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Personnes (id_personne: int, nom: str)
    Competences (id_competence: int, label: str)
    # Liaison entre ces 2 tables
    table personnes_competences:
     id_personne : int
     id_competence : int
     est_principale (pour cette personne et donc unique pour une personne) : boolean
    Si c'est cela, alors tout le problème avec l'ORM est comment déclarer cette liaison avec un champ supplémentaire, mais c'est une problématique récurrente avec django donc il est facile de trouver de la doc/des articles là-dessus.

    EDIT: nouveauté depuis 10 ans ...

    j'ai donné mon petit code plus haut à chatgpt, m'a sorti les 3 modèles et, après 2 autres demandes, 2 codes simples pour chercher les personnes et les compétences.
    Donc outil qui peut être un point de départ pour transformer le modèle sql en django

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     ...
    class PersonneCompetence(models.Model):
        personne = models.ForeignKey(Personne, on_delete=models.CASCADE)
        competence = models.ForeignKey(Competence, on_delete=models.CASCADE)
        est_principale = models.BooleanField()
    ...
     
    competence = Competence.objects.get(label='Label de la compétence')
    personnes_competence = PersonneCompetence.objects.filter(competence=competence)
     
    print(f"Personnes ayant la compétence '{competence.label}':")
    for pc in personnes_competence:
        personne = pc.personne
        est_principale = pc.est_principale
     
        if est_principale:
            print(f"{personne.nom} (Compétence principale)")
        else:
            print(personne.nom)
     
    ###############
    personne = Personne.objects.get(nom='Nom de la personne')
     
    competences = PersonneCompetence.objects.filter(personne=personne)
    competence_principale = competences.get(est_principale=True)
     
    print(f"Compétences de {personne.nom}:")
    for competence in competences:
        print(competence.competence.label)
     
    print(f"Compétence principale de {personne.nom}: {competence_principale.competence.label}")
    Assurez-vous de remplacer 'Nom de la personne' par le nom réel de la personne que

Discussions similaires

  1. Le serpent qui se mord la quequette ?
    Par fiftytwo dans le forum SSII
    Réponses: 24
    Dernier message: 29/07/2014, 11h56
  2. [Débutant] Création d'une application Java qui appelle des scripts Perl
    Par dark_angel91 dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 31/05/2011, 19h31
  3. Réponses: 3
    Dernier message: 13/08/2008, 13h02
  4. composant type grille entete détail
    Par butch dans le forum Composants VCL
    Réponses: 5
    Dernier message: 09/10/2006, 10h53
  5. [débutant] Lire et compiler un source qui n'est pas de moi
    Par Le Furet dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 21/01/2006, 13h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo