models

Document Actions
Réponses: 1   Visites: 411
Up one level
Vous devez être un membre enregistré pour contribuer sur ce forum. Inscrivez-vous maintenant

models

Posté par youpsla le 17/10/2011 00:33
Bonjour,
peut-être que ma question aurait plus sa place dans le forum général python.

J'ai qques notions de python, surtout la programmation fonctionnelle, et suis en train de suivre le tutorial Django.

Je me pose une question en particulier sur le code suivant donné en exemple:

1 from django.db import models
2
3 class Person(models.Model):
4 first_name = models.CharField(max_length=30)
5 last_name = models.CharField(max_length=30)

Pouvez-vous me dire si mes assertions suivantes sont justes:
- ligne 1 : On importe la méthode "models" de django.db. S'agit-il bien de la méthode ou de la classe ?

- ligne 3 : On définit la classe Person qui hérite de la classe models.Model (Ce qui m'incite à penser que précédemment il s'agit bien d'une classe qui est importée)

- ligne 4 : On crée l'objet firt_name en appelant la méthode CharField du module models. Là je crois que je suis perdu. CharField n'est-il pas une classe vue la syntaxe de son nom. De plus pourquoi est-ce que en ligne 3 on fait hériter de models.Model et ici on utilise models. Peut-être que models ne fait pas référence à la même chose dans chacun des deux cas ?

J'espère que cela n'est pas trop confus.

Merci par avance pour vos commentaires/indications.

Alain

Re: models

Posté par Sebastien le 25/10/2011 22:59
Bonjour,

C'est effectivement une question général sur python.
Quand vous faites :
from django.db import models

Vous importez le module "models".
Un module peut contenir des fonctions ou des classes avec leurs méthodes.
Je crois ne pas me tromper en disant qu'un module, c'est un fichier, cela correspond à ma pratique, mais c'est peut-être plus subtile (quid des répertoires...).

Pour utiliser les éléments du module "models" vous faites models.CharField() par exemple.

si vous voulez importez tous les éléments de django.db.models vous ferriez :
from django.db.models import *
...
first_name = CharField(max_length=30)
mais je vous déconseille cette écriture qui n'est pas assez explicite pour être maintenable (et pose sûrement d'autre problèmes).

Vous pourriez n'importer que la classe CharField :
from django.db.models import CharField
...
first_name = CharField(max_length=30)


Vous pourriez aussi utiliser un alias (un surnom) pour votre import :
from django.db import models as toto
...
first_name = toto.CharField(max_length=30)


d'ailleurs vous pourriez utiliser la classe CharField (car CharField est bien une classe) sans ne rien importer du tout en faisant :
first_name = django.db.models.CharField(max_length=30)

Dans le module "models" il y a plein de classes. Notamment les classe Model et CharField.

L'attribut first_name de la classe Person contient donc un objet de classe CharField


Cordialement,
Sébastien

Python.org : Le site officiel du langage Python.
Zope.org : Le site web officiel de Zope.
Daily Python-URL : Actus de l'univers Python.
Tribute to Zyons : Zyons notre ami et membre fondateur de l'Afpy, nous quittait en 2005.