Django-fr

Forum

#1 23-07-2012 21:01:24

jero
Membre
Lieu : actuellement Brésil
Inscription : 23-07-2012
Messages : 1

Model field reference / OneToOneField

bonjour, je suis un novice autant avec python que django ^^
je crois que je commence un peu a comprendre les fondamentaux.

Je parcours donc un peu plus précisemment la documentation en fonction de mes besoins qui sont pour le moment ceux d'un débutant.

Dans la page sur les Fields et les relationship je m'interesse à OneToOneField

ce type de champ bénéficie d'un argument supplémentaire par rapport aux autres champs indiquant une relation entre plusieurs modèles.
=> OneToOneField.parent_link

la doc en anglais indique à ce sujet https://docs.djangoproject.com/en/1.4/r … arent_link :

When True and used in a model which inherits from another (concrete) model, indicates that this field should be used as the link back to the parent class, rather than the extra OneToOneField which would normally be implicitly created by subclassing.

je ne suis pas bien sûr de comprendre la subtibilité sad
quelqu'un a un avis sur la question ?

merci

Hors ligne

#2 25-07-2012 09:46:48

ksamuel
Modérateur
Inscription : 22-06-2012
Messages : 40
Site Web

Re : Model field reference / OneToOneField

En Django les classes de modèle peuvent hériter les unes des autres comme une classe ordinnaire:

class Personne(models.Model):
    age = models.IntegerField()
    nom = modelsCharField(max_length=120)
Class Femme(Personne):
    enceinte = models.BooleanField(default=False)
Class Homme(Personne):
    pass

Dans ce cas toute instance de Femme aura aussi accès aux champs age et nom, puisque tout le monde à un age et un nom, mais seule Femme aura accès au champ enceinte puisque ce champ ne concerne pas (encore :-)) les hommes.

Au niveau de la base de données, il y a 3 tables de créées: une table pour Personne, une table pour Femme et une table pour Homme.

Quand vous faites:

print Femme.objects.get(id=10).name

Django fait en faite silencieusement un JOIN entre la table de Femme et de Personne, pour donner l'impression que Femme possède le champ name directement.

Cette fonctionalité utilise automatiquement un champ OneToOneField, mais avec parent_link = True (vous ne le voyez pas, Django le fait pour vous, mais c'est faisable à la main). Si parent_link = True, on aura pas un lien visible entre le deux modèles comme dans une relation d'égale à égale, mais on aura une relation de parenté.

Hors ligne

Pied de page des forums