gpt4 book ai didi

python - 在 Django shell 中定义模型类失败

转载 作者:IT老高 更新时间:2023-10-28 22:14:56 25 4
gpt4 key购买 nike

当我使用 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

我能做什么?

最佳答案

模型定义必须出现在应用程序中 - 您看到的错误是它试图采用 __name__ model_module - 这应该类似于 project.appname.models 用于 project\appname\models.py - 并获取应用名称 appname。在交互式控制台中,模块的 __name__'__main__' - 所以它失败了。

要解决这个问题,您需要自己在 Meta 类中指定 app_label

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

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

关于python - 在 Django shell 中定义模型类失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4382032/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com