【发布时间】:2018-12-25 13:14:22
【问题描述】:
我遇到了一个奇怪的情况。怎么了?
当我从项目目录运行python manage.py shell,导入一个模型(任何模型),并尝试访问它的Model.objects(objects.all(),objects.create(),...),它会抛出一个OperationalError如下引用。
>>> from Interface.models import ClientUser
>>> ClientUser.objects.all()
django.db.utils.OperationalError:没有这样的表:Interface_clientuser
>>> ClientUser.objects.create()
django.db.utils.OperationalError:没有这样的表:Interface_clientuser
我试过删除数据库然后运行python manage.py migrate,关闭所有东西并重新启动我的电脑,然后非常努力地盯着代码(大声笑),但无济于事..
有趣的是,我的单元测试都通过了;包括,例如,调用ClientUser.objects.create()
这是 ClientUser 模型,虽然我不认为模型是问题(所有模型都会发生错误并且单元测试通过..)
class ClientUser(models.Model):
guid = models.UUIDField(null=True, unique=True)
username = models.CharField(max_length=256, null=True, unique=True)
first_name = models.CharField(max_length=256, null=True)
last_name = models.CharField(max_length=256, null=True)
email = models.CharField(max_length=256, null=True)
def most_recent_device(self):
return self.devices.order_by('-pk').first()
# I just put this classmethod in. I'm not sure if this will work, and went to the shell to try it, and that's when I noticed this issue. I've tried commenting it out and it makes no difference.
@classmethod
def get_by_guid(cls, guid):
return cls.objects.get(guid=guid)
这是来自 shell 的完整堆栈跟踪(上图):
>>> from Interface.models import ClientUser
>>> ClientUser.objects.all()
Traceback (most recent call last):
File "C:\Program Files\Python37\lib\site-packages\django\db\backends\utils.py", line 85, in _execute
return self.cursor.execute(sql, params)
File "C:\Program Files\Python37\lib\site-packages\django\db\backends\sqlite3\base.py", line 303, in execute
return Database.Cursor.execute(self, query, params)
sqlite3.OperationalError: no such table: Interface_clientuser
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "C:\Program Files\Python37\lib\site-packages\django\db\models\query.py", line 248, in __repr__
data = list(self[:REPR_OUTPUT_SIZE + 1])
File "C:\Program Files\Python37\lib\site-packages\django\db\models\query.py", line 272, in __iter__
self._fetch_all()
File "C:\Program Files\Python37\lib\site-packages\django\db\models\query.py", line 1179, in _fetch_all
self._result_cache = list(self._iterable_class(self))
File "C:\Program Files\Python37\lib\site-packages\django\db\models\query.py", line 53, in __iter__
results = compiler.execute_sql(chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size)
File "C:\Program Files\Python37\lib\site-packages\django\db\models\sql\compiler.py", line 1068, in execute_sql
cursor.execute(sql, params)
File "C:\Program Files\Python37\lib\site-packages\django\db\backends\utils.py", line 100, in execute
return super().execute(sql, params)
File "C:\Program Files\Python37\lib\site-packages\django\db\backends\utils.py", line 68, in execute
return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
File "C:\Program Files\Python37\lib\site-packages\django\db\backends\utils.py", line 77, in _execute_with_wrappers
return executor(sql, params, many, context)
File "C:\Program Files\Python37\lib\site-packages\django\db\backends\utils.py", line 85, in _execute
return self.cursor.execute(sql, params)
File "C:\Program Files\Python37\lib\site-packages\django\db\utils.py", line 89, in __exit__
raise dj_exc_value.with_traceback(traceback) from exc_value
File "C:\Program Files\Python37\lib\site-packages\django\db\backends\utils.py", line 85, in _execute
return self.cursor.execute(sql, params)
File "C:\Program Files\Python37\lib\site-packages\django\db\backends\sqlite3\base.py", line 303, in execute
return Database.Cursor.execute(self, query, params)
django.db.utils.OperationalError: no such table: Interface_clientuser
【问题讨论】:
标签: python django python-3.x