且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

在Django shell中定义模型类失败

更新时间:2023-12-01 21:44:16

模型定义必须在一个应用程序中 - 你的错误看到它试图采取 __名称__ model_module - 这应该是像项目.appname.models for project\appname\models.py - 并获取应用程序名称, appname 。在交互式控制台中,模块的 __ name __ '__ main __' - 所以它失败。

The model definition must come in an application - the error you're seeing there is that it tries to take the __name__ model_module - which should be something like project.appname.models for project\appname\models.py - and get the app name, appname. In the interactive console, the module's __name__ is '__main__' - so it fails.

要解决这个问题,您需要在 Meta 中自行指定 app_label > class;

To get around this, you'll need to specify the app_label yourself in the Meta class;

>>> 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

For explanation of why you can do that, look at that file mentioned in the 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 = {}

(其中 Meta 类,请参见该文件的上方。)

(Where meta is the Meta class, see just above in that file.)