Defining a model class in Django shell fails

后端 未结 3 2081
时光说笑
时光说笑 2020-12-15 03:54

when I use the Django shell, it shows an error; this is the error:

>>> from django.db import models
>>> class Poll(models.Model):
...     q         


        
3条回答
  •  慢半拍i
    慢半拍i (楼主)
    2020-12-15 04:32

    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.

    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'
    

    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 = {}
    

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

提交回复
热议问题