LâAPI _meta des modĂšles¶
LâAPI _meta des modĂšles est au cĆur de lâORM de Django. Elle permet Ă dâautres parties du systĂšme telles que les recherches, les requĂȘtes, les formulaires et le site dâadministration de comprendre les capacitĂ©s de chaque modĂšle. LâAPI est accessible au travers de lâattribut _meta de chaque classe de modĂšle, qui est une instance dâobjet django.db.models.options.Options.
Les mĂ©thodes et les attributs quâelle fournit peuvent ĂȘtre utilisĂ©s pour :
RĂ©cupĂ©rer toutes les instances de champ dâun modĂšle
RĂ©cupĂ©rer une instance de champ unique dâun modĂšle par son nom
RĂ©cupĂ©rer tous les champs composant la clĂ© primaire dâun modĂšle
API dâaccĂšs aux champs¶
RĂ©cupĂ©ration dâune instance de champ unique dâun modĂšle par son nom¶
- Options.get_field(field_name)[source]¶
Renvoie une instance de champ correspondant au nom indiqué.
field_namepeut ĂȘtre le nom dâun champ du modĂšle, dâun champ dâun modĂšle abstrait ou hĂ©ritĂ©, ou dâun champ dĂ©fini sur un autre modĂšle pointant vers ce modĂšle. Dans ce dernier cas,field_nameest (par ordre de prĂ©fĂ©rence) le nomrelated_query_namedĂ©fini par lâutilisateur, le nomrelated_namedĂ©fini par lâutilisateur ou le nom gĂ©nĂ©rĂ© automatiquement par Django.Les
champs cachĂ©sne peuvent pas ĂȘtre rĂ©cupĂ©rĂ©s par leur nom.Si aucun champ du nom indiquĂ© nâa Ă©tĂ© trouvĂ©, une exception
FieldDoesNotExistest générée.>>> from django.contrib.auth.models import User # A field on the model >>> User._meta.get_field("username") <django.db.models.fields.CharField: username> # A field from another model that has a relation with the current model >>> User._meta.get_field("logentry") <ManyToOneRel: admin.logentry> # A non existent field >>> User._meta.get_field("does_not_exist") Traceback (most recent call last): ... FieldDoesNotExist: User has no field named 'does_not_exist'
RĂ©cupĂ©ration de toutes les instances de champ dâun modĂšle¶
- Options.get_fields(include_parents=True, include_hidden=False)[source]¶
Renvoie un tuple de champs associés à un modÚle.
get_fields()accepte deux paramĂštres pouvant ĂȘtre utilisĂ©s pour contrĂŽler quels champs sont renvoyĂ©s :include_parentsTruepar dĂ©faut. Inclut rĂ©cursivement les champs dĂ©finis dans les classes parentes. Lorsque ce paramĂštre est dĂ©fini ĂFalse,get_fields()ne renvoie que les champs dĂ©clarĂ©s directement sur le modĂšle concernĂ©. Les champs de modĂšles qui hĂ©ritent directement de modĂšles abstraits ou de classes mandataires sont considĂ©rĂ©s comme locaux, et non pas dĂ©finis sur le parent.include_hiddenFalsepar dĂ©faut. Si dĂ©fini ĂTrue,get_fields()inclurales champs masquĂ©s.
>>> from django.contrib.auth.models import User >>> User._meta.get_fields() (<ManyToOneRel: admin.logentry>, <django.db.models.fields.AutoField: id>, <django.db.models.fields.CharField: password>, <django.db.models.fields.DateTimeField: last_login>, <django.db.models.fields.BooleanField: is_superuser>, <django.db.models.fields.CharField: username>, <django.db.models.fields.CharField: first_name>, <django.db.models.fields.CharField: last_name>, <django.db.models.fields.EmailField: email>, <django.db.models.fields.BooleanField: is_staff>, <django.db.models.fields.BooleanField: is_active>, <django.db.models.fields.DateTimeField: date_joined>, <django.db.models.fields.related.ManyToManyField: groups>, <django.db.models.fields.related.ManyToManyField: user_permissions>) # Also include hidden fields. >>> User._meta.get_fields(include_hidden=True) (<ManyToOneRel: auth.user_groups>, <ManyToOneRel: auth.user_user_permissions>, <ManyToOneRel: admin.logentry>, <django.db.models.fields.AutoField: id>, <django.db.models.fields.CharField: password>, <django.db.models.fields.DateTimeField: last_login>, <django.db.models.fields.BooleanField: is_superuser>, <django.db.models.fields.CharField: username>, <django.db.models.fields.CharField: first_name>, <django.db.models.fields.CharField: last_name>, <django.db.models.fields.EmailField: email>, <django.db.models.fields.BooleanField: is_staff>, <django.db.models.fields.BooleanField: is_active>, <django.db.models.fields.DateTimeField: date_joined>, <django.db.models.fields.related.ManyToManyField: groups>, <django.db.models.fields.related.ManyToManyField: user_permissions>)
RĂ©cupĂ©rer les champs composant la clĂ© primaire dâun modĂšle¶
- Options.pk_fields[source]¶
Renvoie une liste des champs composant la clĂ© primaire dâun modĂšle.
Lorsquâune
clé primaire compositeest définie dans un modÚle, elle contiendra tous leschampsauxquels elle fait référence.from django.db import models class TenantUser(models.Model): pk = models.CompositePrimaryKey("tenant_id", "id") tenant_id = models.IntegerField() id = models.IntegerField()
>>> TenantUser._meta.pk_fields [ <django.db.models.fields.IntegerField: tenant_id>, <django.db.models.fields.IntegerField: id> ]
Sinon, elle contiendra le seul champ déclaré comme
clé primairedu modÚle.>>> User._meta.pk_fields [<django.db.models.fields.AutoField: id>]