2015-01-07 2 views
0

Недавно я решил изучить структуру Django и начал использовать официальные учебники Django для этого же. Код, указанный в официальных учебных пособиях, чтобы создать модель выглядит следующим образом:Django: Наследование подкласса «Модель»

from django.db import models 


class Question(models.Model): 
    question_text = models.CharField(max_length=200) 
    pub_date = models.DateTimeField('date published') 


class Choice(models.Model): 
    question = models.ForeignKey(Question) 
    choice_text = models.CharField(max_length=200) 
    votes = models.IntegerField(default=0) 

Теперь код довольно прост. Тем не менее, у меня беспокоит понимание иерархии подкласса «Модель», который наследуется внутри каждой модели класса, который в настоящее время определено:

models.Model 

Где Model класс находится внутри каталога models? Я предполагаю, что это довольно простой вопрос, поэтому простите мое невежество.

+1

https://github.com/django/django/blob/master/django/db/models/__init__.py#L9 –

ответ

1

Использование Python manage.py оболочки

каталог проекта $ python manage.py shell

каталог проекта - Где manage.py модуль существует.

1) models - это модуль python, не являющийся каталогом или пакетом.

>>> from django.db import models 
>>> models 
<module 'django.db.models' from '/usr/lib/python2.6/site-packages/django/db/models/__init__.pyc'> 

2) Model является класс от django.db.models.base модуля.

>>> help(models.Model) 


Help on class Model in module django.db.models.base: 

class Model(__builtin__.object) 
| Methods defined here: 
| 
| __eq__(self, other) 
| 
| __hash__(self) 
| 
| __init__(self, *args, **kwargs) 
| 
| __ne__(self, other) 
2

Сам класс находится в django.db.models.base. Если вы посмотрите на source code, то модуль models на самом деле представляет собой только папку, а не файл models.py. Однако класс Model, среди других обычно используемых классов в пакете, импортируется в __init__.py и поэтому доступен как django.db.models.<class>.

Смежные вопросы