Django-fr

Forum

  • Accueil
  • » Django-fr
  • » Auriez-vous quelques explications sur ContentType svp ?

#1 18-01-2011 10:12:51

beegees
Membre
Inscription : 26-12-2010
Messages : 66

Auriez-vous quelques explications sur ContentType svp ?

Bonjour tout le monde,

J'aimerais savoir à quoi sert exactement ContentType

from django.contrib.contenttypes.models import ContentType

J'ai lu la documentation Django, et ça me dit entre autre ceci :

Django includes a contenttypes application that can track all of the models installed in your Django-powered project, providing a high-level, generic interface for working with your models.

Ce qui m'interpelle, c'est ceci :

a high-level, generic interface for working with your models

Qu'est-ce que cela nous apporte de plus de travailler avec ContentTye ?


Merci d'avance pour l'aide.

Hors ligne

#2 18-01-2011 10:41:46

Rémy HUBSCHER
Membre
Inscription : 11-08-2010
Messages : 161

Re : Auriez-vous quelques explications sur ContentType svp ?

Bonjour beegees.

Pour faire simple, le content type te permet de faire une ForeignKey sur plusieurs types d'objets.

Imaginons que tu fasses un site internet avec un système de commentaires.
Tu vas avoir des commentaires sur les vidéos, les news, les photos et les commentaires des autres.

Plutôt que de faire un système de commentaire pour chacun avec une grande part de copier/coller, tu peux utiliser le content type pour lier ton commentaire soit à un objet video, soit à une news soit à une photo soit à un autre commentaires.

Grâce au mécanisme de ContentType tu pourras récupèrer à chaque fois les commentaires de ton objet.
Avec une seule app plus simplement maintenable et vulgarisable.

Avec Django c'est DRY (Don't Repeat Yourself), Pluggable et Réutilisable smile

Hors ligne

#3 18-01-2011 11:01:42

beegees
Membre
Inscription : 26-12-2010
Messages : 66

Re : Auriez-vous quelques explications sur ContentType svp ?

Rémy HUBSCHER a écrit :

Bonjour beegees.

Pour faire simple, le content type te permet de faire une ForeignKey sur plusieurs types d'objets.

Imaginons que tu fasses un site internet avec un système de commentaires.
Tu vas avoir des commentaires sur les vidéos, les news, les photos et les commentaires des autres.

Plutôt que de faire un système de commentaire pour chacun avec une grande part de copier/coller, tu peux utiliser le content type pour lier ton commentaire soit à un objet video, soit à une news soit à une photo soit à un autre commentaires.

Grâce au mécanisme de ContentType tu pourras récupèrer à chaque fois les commentaires de ton objet.
Avec une seule app plus simplement maintenable et vulgarisable.

Avec Django c'est DRY (Don't Repeat Yourself), Pluggable et Réutilisable smile

Bonjour Rémy,

Merci pour ta réponse.

Je vais essayer de trouver dans quelle partie de mon code on utilise ContentType.

Est-ce qu'un bout de code m'informe qu'on utilise ContentType ?

Merci encore pour l'aide.

Hors ligne

#4 18-01-2011 11:08:59

Rémy HUBSCHER
Membre
Inscription : 11-08-2010
Messages : 161

Re : Auriez-vous quelques explications sur ContentType svp ?

Bonjour,

Ben lorsque tu utilises Content Type tu le sais généralement.
Je ne comprends pas ta question. As-tu une erreur qui te parle de ContentType par exemple ?

Il peut y avoir un problème lorsque tu fais un syncdb avec un initial_data qui contient des content types.

Pour éviter ce problème, tu peux faire un dumpdata avec ces valeurs :

python manage.py dumpdata --format yaml --indent=4 --exclude=contenttypes --exclude=sessions > initial_data.yaml

Tu peux aussi faire ton syncdb sans initial_data dans un premier temps, vider la base de ContentType et relancer le syncdb avec ton initial_data.

Le problème c'est que tu risques d'avoir des incohérences de content_types. (S'il modifie l'ordre des ID par l'ajout d'une nouvelle app par exemple)
Il faudra bien faire attention d'y veiller.

Mais si tu n'utilises pas les content_types, tu n'as pas à t'en soucier.

Dernière modification par Rémy HUBSCHER (18-01-2011 11:09:21)

Hors ligne

#5 18-01-2011 11:11:50

beegees
Membre
Inscription : 26-12-2010
Messages : 66

Re : Auriez-vous quelques explications sur ContentType svp ?

Bonjour,

Merci pour ta réponse.

Je reprends une application qui est faite à 90%.

ContentType est utilisé dans le code mais ce n'est pas moi qui l'ai intégré.

Merci pour ton aide.

Hors ligne

#6 18-01-2011 11:20:56

Rémy HUBSCHER
Membre
Inscription : 11-08-2010
Messages : 161

Re : Auriez-vous quelques explications sur ContentType svp ?

Si tu reprends une application, tu peux voir les models impactés par ContentType car ils auront ce genre de ForeignKey :

class Favorite(models.Model):
    user = models.ForeignKey(User)
    content_type = models.ForeignKey(ContentType)
    object_id = models.PositiveIntegerField()
    content_object = generic.GenericForeignKey('content_type', 'object_id')

Le content_object, le content_type et le object_id

Hors ligne

#7 18-01-2011 11:24:12

beegees
Membre
Inscription : 26-12-2010
Messages : 66

Re : Auriez-vous quelques explications sur ContentType svp ?

En effet, j'ai ceci :

content_type = models.ForeignKey(ContentType,editable=False,null=True)
self.content_type = ContentType.objects.get_for_model(self.__class__)

et ceci :

def as_event_class(self):
        content_type = self.content_type
        model = content_type.model_class()
        if (model == Event):
            return self
        return model.objects.get(id=self.id)

Merci encore pour l'aide.

Hors ligne

  • Accueil
  • » Django-fr
  • » Auriez-vous quelques explications sur ContentType svp ?

Pied de page des forums