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 :

heritage de model et manager


Sujet :

Django Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Par défaut heritage de model et manager
    Bonjour à tous,

    J'ai un problème avec l'héritage dans mes models: je crée une classe ThrashableModel en m'inspirant de ce billet:
    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
    class TrashableModel(models.Model):
     
     
    	deleted = models.BooleanField(default=False, null=False, blank=False)
     
    	objects = UnTrashedManager()
    	trashed = TrashedManager()
     
     
     
    	def delete(self):
    		self.deleted = True
    		self.save()
     
    	def undelete(self):
    		self.deleted = False
    		self.save()
     
    	restore = undelete
    avec les managers qui vont bien:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class UnTrashedManager(models.Manager):
    	def get_query_set(self):
    		return super(UnTrashedManager, self).get_query_set().filter(deleted=False)
     
    class TrashedManager(models.Manager):
    	def get_query_set(self):
    		return super(TrashedManager, self).get_query_set().filter(deleted=True)
    j'hérite de mon model:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class Zone(TrashableModel):
     
     
    	name = models.CharField(max_length=64, null=False, blank=False, unique=True)
    	slug = models.CharField(max_length=4, null=False, blank=False, unique=True)
     
    	def __unicode__(self):
    		return "zone %s" % self.nom
    L' héritage fonctionne pour le champ deleted, pas pour mes managers!

    Y-a-t-il une astuce pour les hériter sans avoir à les ré-écrire dans chaque nouveau model?

    Merci.

  2. #2
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Par défaut
    quand je travaillait sur la 0.96 l'héritage des models n'était pas géré (leur classes sont des classes un peu bâtarde avec pas mal de mécanisme different de la POO python standard), si tu est sur la svn peut etre qu'il ont commencer a mettre certaines chose en place mais je ne pense pas que ce soit finalisé.

  3. #3
    Membre Expert Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Par défaut
    Salut Anthyme,

    merci pour ta réponse.
    si tu est sur la svn peut etre qu'il ont commencer a mettre certaines chose en place
    Effectivement, j'utilise la version 1.0alpha.
    mais je ne pense pas que ce soit finalisé.
    Je pense aussi, j'ai des erreurs d'intégrité avec les clefs primaires....

    Solution palliative: Je vais dupliquer mon code en attendant (même si c'est pas très rock 'n' roll et que ça ne respecte pas l'esprit DRY).

  4. #4
    Membre éprouvé Avatar de vdemeester
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 110
    Par défaut
    L'héritage des modèles c'est bon. Par contre certain élément du modèle ne sont pas hérité, comme les managers, entre autre. (ou en tout cas c'est mal géré). Tu as pas non plus beaucoup de code à dupliquer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    	objects = UnTrashedManager()
    	trashed = TrashedManager()
    Normalement, juste ça dans le parent et l'enfant, ça devrait marcher.

    Faut voir sur le group django (google groupe) ou sur le code.djangoproject s'il n'y a pas une discussion ou un ticket à ce propos.

    edit : au passage, un petit lien : http://code.djangoproject.com/wiki/V...admap#schedule .

Discussions similaires

  1. [Doctrine] Model de donnée heritage
    Par chlock62 dans le forum ORM
    Réponses: 0
    Dernier message: 26/12/2012, 12h58
  2. Heritage/Polymorphisme et modele relationnel
    Par Miko95 dans le forum Modélisation
    Réponses: 1
    Dernier message: 05/03/2011, 22h53
  3. Réponses: 1
    Dernier message: 03/03/2010, 01h02
  4. [Décorateur] [Java] Quel modele de conception choisir au lieu de l'heritage ?
    Par Xiao-An dans le forum Design Patterns
    Réponses: 18
    Dernier message: 17/02/2007, 23h31

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