django et héritage

J'ai la tête qui va exploser....

a marqué ce sujet comme résolu.

Salut, J’ai un petit souci avec mes modèles que je n’arrive pas à résoudre :/ J’espère que quelqu’un saura m’enlever cette épine du pied parce que j’en peu plus de tourner en rond depuis des heures… :(

J’ai 4 modèles héritant tous de Accessoire :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
class Accessoire(models.Model):
    nom = models.CharField(max_length=100, verbose_name="Nom ")

    @property
    def est_porte_clef(self):
        ??????

    @property
    def est_bracelet(self):
        ??????  

    class Meta:
        verbose_name_plural="Accessoires"

class PorteClef(Accessoire):
    description = models.CharField(max_length=100, verbose_name="Description")
    class Meta:
        verbose_name_plural="Porte Clefs"

...

J’aimerai trouver un moyen de savoir lorsque je liste les accessoires, s’ils sont un porte-clés, un bracelet....

Voilà, c’est tout simple à expliquer, mais j’en peux plus :$ :$

Merci

+0 -0

a priori je mettrais:

 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
33
class Accessoire(models.Model):
    nom = models.CharField(max_length=100, verbose_name="Nom ")

    @property
    def est_porte_clef(self):
        return False

    @property
    def est_bracelet(self):
        return False

    class Meta:
        verbose_name_plural="Accessoires"

class PorteClef(Accessoire):
    description = models.CharField(max_length=100, verbose_name="Description")
    class Meta:
        verbose_name_plural="Porte Clefs"
    objects = InheritanceManager()  # important : ça évite de faire trouze millions de requêtes

    @property
    def est_porte_clef(self):
        return True

class Bracelet(Accessoire):

    class Meta:
        verbose_name_plural="Bracelet"
    objects = InheritanceManager()  # important : ça évite de faire trouze millions de requêtes

    @property
    def est_braceket(self):
        return True
+0 -0

Hmmm, quelle bonne idée, c’est tout simple en plus....

Parce que là, j’étais en train de commencer à faire un truc qui vérifie si l’instance de Accessoire existait dans PorteClef :

1
2
3
4
5
6
    def est_porteclef(self):
        try:
            PorteClef.objects.get(pk=self.id)
            return True
        except:
            return False

Et je pense que c’est très lourd…

EDIT : par contre, c’est une lib externe InheritanceManager ?

+0 -0

InheritanceManager c’est soit inclus dans django soit dans django-model-utils, je sais plus.

ensuite les properties ne sont pas stokées en bdd donc tu peux pas les requêtées. Tu peux juste obtenir un ensemble d’objets qui seront soit des PorteClef soit des Bracelet.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte