2012-04-14 13 views
6

Ho scritto i miei primi modelli Django e volevo dare un'occhiata alla classe base estesa a tutti i modelli (esempio: "class Poll (models.Model") ma non ho trovato la classe base del Model. Ho controllato il source on github e quando ho sfogliato la directory django.db.models sono rimasto sorpreso di non trovare un file "Model.py" che potessi esaminare. È stato generato questo file? Oppure il modello di classe è da qualche altra parte? O è in corso un po 'di magia del pacchetto Python che io non sono a conoscenza?Dove si trova Model.py nel codice sorgente di Django?

risposta

5

Come è stato notato prima, Python non è Java. In particolare, non c'è niente in Python che dice che una classe deve vivere in un file con lo stesso nome della classe.

Come San4ez sottolinea, le Model vive classe in django.db.models.base, e viene importato nel file __init__.py in quella directory in modo che possa fare riferimento direttamente come models.Model. Questo non è un tipo di magia, solo normale idioma Python.

Tuttavia, una volta esaminato il codice per la classe stessa, scoprirete che in realtà consiste in un bel po 'di magia Python, in particolare nei metaclassi. Ma questa è una domanda diversa.

+0

L'ho trovato con il tuo aiuto (no grazie a github search). Questo mi porta ad alcune domande piuttosto filosofiche sulle convenzioni/stile/regole di Python, tuttavia questa è una domanda per un altro post (e dopo un po 'di ricerca di fondo è stata fatta anche questa). Grazie! –

2

In https://github.com/django/django/blob/master/django/db/models/__init__.py

sguardo

from django.db.models.base import Model 
.210

Così Model classe è descritto ci https://github.com/django/django/blob/master/django/db/models/base.py

Letteralmente è possibile importare il modello in questo modo from django.db.models.base import Model al progetto. Ma gli sviluppatori di core del django hanno deciso di nascondere alcune classi di servizio, importarne alcune nel pacchetto django.db.models e offrirti di utilizzare l'importazione più breve.

Problemi correlati