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 :

Categorie , sous categories et sous sous categories avec django


Sujet :

Django Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Categorie , sous categories et sous sous categories avec django
    Bonjour à tous , je débute avec django et j'essaie de créer des categories avec sous sous catégories j'ai essayé pas mal de chose , passé une journée dessu et je m'avoue vaincu , je pense qu'il me manque des connaissances pour arriver a faire ce que je veux . Par contre s'il vous plait ne me donné pas un package a installé je veux vraiment m'entrainer le but n'est pas juste que ça marche mais de voir comment ça peut marcher . Enfin bref donc voila ce que j'aimerai voir afficher sur mon site :

    • Informatique
      • PHP
      • PYTHON
        • Django Flask
    • Graphisme
    • Photographie


    J'ai donc au début créer une simple catégorie et ensuite j'ai vue sur internet que l'on pouvait créer une clé etrangere directement dans le model categorie , j'ai tenté de créer avec un ForeignKey mais je crois qu'il faut un manytomany si je veux une infinie de souscategorie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class Category(models.Model):
        title = models.CharField(max_length=100)
        parent = models.ForeignKey('self', null=True, blank=True,on_delete=models.CASCADE)
     
        def __str__(self):
            return("%s" %(self.title))
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class Category(models.Model):
     
        category_tag = models.CharField(max_length=50)
        parent = models.ManyToManyField('self', symmetrical=False, blank=True, related_name='categories')
     
        def __str__(self):
            return("%s" %(self.category_tag))
    En soit pour l'ajout ou l'update ça marche je n'arrive juste pas à trouver comment je dois faire pour l'affichage . J'aimerai quelques choses comme j'ai mis en dessus , le souci c'est que même quand je reussi d'afficher il fait doublons .

    Code html : 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
            <ul>
                {% for category in categories %}
                    <ul>
                        <li><a href=""> {{ category.title }}</a> 
                            {% if category.parent  %}
                            <ul>
                                <li><a href="">{{ category.parent.title }}</a> </li>
                                </li>
                            </ul>
                            {% endif %}
     
                       </li>
                    </ul>
     
                {% empty %}
                <li> Pas encore de categorie </li>
                {% endfor %}
            </ul>

    Je me dis donc je dois faire une requete sql ou une fonction specifique , peut être dans la view ou le model . Je pense qu'il faut que je fasse un truc du genre si parent est null alors afficher les categories ou de joindre les deux colonnes mais j'arrive pas . J'ai aussi tenté ça mais ça marche pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        top_level_cats = Category.objects.filter(parent__isnull=True)
    et ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    subcategories = Category.objects.filter(parent__id=category.id)
    Mais rien ne marche , j'ai essayé encore pas mal de choses et je m'arrache les cheveux . Comme je l'ai dit plus tôt je démarre dans django et il y'a encore pas mal de notion qui me manque mais si quelqu'un pouvait m'aider ça me sauverait la vie
    Dernière modification par Invité ; 10/03/2020 à 22h12.

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 746
    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 746
    Par défaut
    Salut,

    Comment allez vous représenter une hiérarchie sous forme d'un tableau?

    • Informatique
      • PHP
      • PYTHON
        • Django
        • Flask
    • Graphisme
    • Photographie


    comme çà:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ID  P     Label
    1    -1   Informatique
    2     1    PHP
    3     1    PYTHON
    4     3    Django      
    5     3    Flask
    6    -1   Graphisme
    7    -1   Photographie
    et vous voyez qu'il y a des lignes ou P(arent) est -1 pour marquer l’absence, que les lignes Python et PHP on pour parent l'ID 1 qui correspond à Informatique,....

    Maintenant, considérez ce tableau comme une liste de tuples:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    T = [
        (1,    -1,   Informatique),
        (2,     1,    PHP),
        (3,     1,    PYTHON),
        (4,     3,    Django),      
        (5,     3,    Flask),
        (6,    -1,   Graphisme),
        (7,    -1,   Photographie),
    ]
    et imaginez une fonction qui vous retourne des informations hiérarchiques pour qu'afficher:
    • Informatique
      • PHP
      • PYTHON
        • Django
        • Flask
    • Graphisme
    • Photographie

    soit "simple".

    Pas facile sans parcourir plusieurs fois le tableau.

    Et si vous voulez que le SGDB qui est sous Django vous permette de faire çà en une seule requête, il va falloir lui faire une requête hiérarchique et si le SGDB le permet voir comment y accéder via Django.

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

  3. #3
    Invité
    Invité(e)
    Par défaut merci
    Bonjour , tous d'abord un grand merci pour avoir pris le temps de lire et de repondre a ma question, effectivement je vois plus claire même si je ne sais toujours pas comment concretement y arriver xD , mais je comprend que j'étais sur la bonne piste avec le recursive , je vais donc continuer mes recherches et encore merci beaucoup

Discussions similaires

  1. Réponses: 13
    Dernier message: 26/04/2004, 19h32
  2. Réception sur le port série sous DOS avec Borland V3.0
    Par jackyjacky dans le forum Autres éditeurs
    Réponses: 24
    Dernier message: 19/03/2004, 23h18
  3. Réponses: 3
    Dernier message: 20/12/2003, 19h53
  4. problème HD ntfs formaté sous WinXP avec win2000
    Par kalminou dans le forum Windows XP
    Réponses: 7
    Dernier message: 27/08/2003, 17h45
  5. [sous-chaine] Avec strpos ou substring ??
    Par terziann dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 17/07/2003, 15h28

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