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é.
Ok, mais je ne vois pas de '__get__' et de famille dans' models.Model' ou métaclasse, alors comment est-ce un descripteur? – agiliq
Le modèle n'est pas un descripteur, les champs sont. –
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. –