2010-01-17 7 views
0

J'ai une classe modèles class A(models.Model): user = models.ForeignKey(User)Comment/Quand Django calcule l'objet ForeignKey

Maintenant, si je fais un a = A.objects.get(pk = something_existing); print a.__dict__, user est pas __dict__. a.user ne donne cependant pas une erreur d'attribut.

Quand l'utilisateur actuel est-il calculé? J'ai regardé dans django.db.models.base.Model et django.db.models.base.ModelBase classes et ils ne remplacent pas __getattr__, (que je devinais pourrait être fait), alors où est-ce calculé/peuplé.

Répondre

3

Django relation fields sont implémentés comme descriptors.

+0

Ok, mais je ne vois pas de '__get__' et de famille dans' models.Model' ou métaclasse, alors comment est-ce un descripteur? – agiliq

+0

Le modèle n'est pas un descripteur, les champs sont. –

+0

Pour être clair, les champs associés (ForeignKey, ManyToMany, etc.) sont implémentés en tant que descripteurs (regardez dans db/models/fields/related.py). La plupart des champs (CharField, IntegerField) n'utilisent pas de descripteurs. –

Questions connexes