在Django shell中定义模型类失败

zjm*_*126 27 python django

当我使用Django shell时,它显示错误; 这是错误:

>>> 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
Run Code Online (Sandbox Code Playgroud)

我能做什么?

Chr*_*gan 45

该模型定义必须进来的应用程序-你看到那里的错误是,它试图走__name__ model_module-这应该是这样project.appname.modelsproject\appname\models.py-并获得应用程序的名称,appname.在交互式控制台中,模块__name__'__main__'- 所以它失败了.

要解决这个问题,你需要app_labelMeta课堂上指定自己;

>>> 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'
Run Code Online (Sandbox Code Playgroud)

有关可以执行此操作的原因的说明,请查看traceback中提到的文件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 = {}
Run Code Online (Sandbox Code Playgroud)

(metaMeta课程在哪里,请参阅该文件中的上方.)

  • @ zjm1126:是的,那就行了.看到这是在交互式控制台中,它并不重要; 我认为你只是因为某些原因搞乱了模型 - 如果你想要使用`task2`中的内容,当然,你应该使用`from task2.models import Poll`. (4认同)