Подтвердить что ты не робот

Определение класса модели в оболочке Django не выполняется

когда я использую оболочку Django, она показывает ошибку; это ошибка:

>>> from django.db import models
>>> class Poll(models.Model):
...     question = models.CharField(max_length=200)
...     pub_date = models.DateTimeField('date published')
...
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "D:\Python25\lib\site-packages\django\db\models\base.py", line 51, in __new__
    kwargs = {"app_label": model_module.__name__.split('.')[-2]}
IndexError: list index out of range

Что я могу сделать?

4b9b3361

Ответ 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, см. выше в этом файле.)

Ответ 2

Этот другой ответ определенно работает для интерактивного приглашения, однако я не думаю, что намерение первого блока кода предназначалось для фактического запуска. Сразу после этого кода в документации моделей ожидается, что в ваш файл models.py, созданный во время предыдущего учебного пособия, будут добавлены следующие коды... Я предполагаю, что почему они тонко обозначили этот раздел "Быстрый пример". Какая головная боль для меня тоже!

Ответ 3

Я столкнулся с этой проблемой, используя Eclipse, Django и PyDev. Мне нужно было иметь приложение (вместо некоторого .py файла, например), выбранного в Проводнике пакетов PyDev (левая панель), прежде чем нажать "Выполнить", чтобы все работало правильно.