让我进一步澄清我正在做的事情。我一直在我的机器上开发我的Django项目。我也在将代码检入存储库。目前我是唯一的开发人员,但其他开发人员将加入。他们将从存储库中签出代码并在他们的机器上运行它。为了模拟这种情况,我将我的代码检出到另一个目录并创建了一个新的数据库。我更新了该checkout的settings.py以使用新数据库。当我执行syncdb重新创建表时,我收到此错误:
$ python -i manage.py syncdb
DatabaseError: (1146, "Table 'testproj.auth_user' doesn't exist")
Traceback (most recent call last):
File "manage.py", line 13, in <module>
execute_from_command_line(sys.argv)
File "c:\Users\jpp\Documents\.virtualenvs\django-test\lib\site-packages\dja
ngo\core\management\__init__.py", line 453, in execute_from_command_line
utility.execute()
File "c:\Users\jpp\Documents\.virtualenvs\django-test\lib\site-packages\dja
ngo\core\management\__init__.py", line 392, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "c:\Users\jpp\Documents\.virtualenvs\django-test\lib\site-packages\dja
ngo\core\management\base.py", line 230, in run_from_argv
sys.exit(1)
SystemExit: 1
这是phymyadmin的数据库设置:
User Host Type Privileges Grant Action
root localhost global ALL PRIVILEGES Yes Edit Privileges
和来自settings.py:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
'NAME': 'testproj', # Or path to database file if using sqlite3.
# The following settings are not used with sqlite3:
'USER': 'root',
'PASSWORD': '****',
'HOST': '127.0.0.1', # Empty for localhost through domain sockets or '127.0.0.1' for localhost through TCP.
'PORT': '', # Set to empty string for default.
}
}
这是INSTALLED_APPS:
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
# Uncomment the next line to enable the admin:
# 'django.contrib.admin',
# Uncomment the next line to enable admin documentation:
# 'django.contrib.admindocs',
'helloworld',
)
因此,我怀疑另一位开发人员遇到同样的问题。这是一个必须在之前解决的方案,但我还没有能够为Google整理正确的词语。
答案 0 :(得分:0)
您不需要创建测试表,Django会自动执行此操作
如果您愿意,可以使用单独的数据库进行测试,只需将其添加到settings file即可。确保创建了DB,但Django自己创建表。
答案 1 :(得分:0)
我发现了问题。
在我创建的应用程序helloworld中,我在__init__.py
中有以下内容:
from django.contrib.auth.models import User
if User.objects.filter(username="hello").count() == 0:
user = User.objects.create_user(username='hello', password='hellotest')
user.save()
当我注释掉整个if语句并运行syncdb时,所有表都被重新创建。我想在创建自己的所有表之前,auth_user
,auth_group
等等.Django可以完成应用程序所需的任何工作。我不确定这是否是python进程打包或Django中的bug /限制的结果。