Ответ 1
Определение модели должно появиться в приложении - ошибка, которую вы видите там, заключается в том, что она пытается взять __name__
model_module
- которая должна быть чем-то вроде project.appname.models
для project\appname\models.py
- и получить приложение имя, appname
. В интерактивной консоли модуль __name__
равен '__main__'
- поэтому он терпит неудачу.
Чтобы обойти это, вам нужно указать app_label
самостоятельно в классе Meta
;
>>> from django.db import models
>>> class Poll(models.Model):
... question = models.CharField(max_length=200)
... pub_date = models.DateTimeField('date published')
... class Meta:
... app_label = 'test'
Чтобы объяснить, почему вы можете это сделать, посмотрите на файл, упомянутый в трассировке, D:\Python25\lib\site-packages\django\db\models\base.py
:
if getattr(meta, 'app_label', None) is None:
# Figure out the app_label by looking one level up.
# For 'django.contrib.sites.models', this would be 'sites'.
model_module = sys.modules[new_class.__module__]
kwargs = {"app_label": model_module.__name__.split('.')[-2]}
else:
kwargs = {}
(Где Meta
- класс Meta
, см. выше в этом файле.)