我是django
以及模块和网络应用程序的初学者。
这是追溯和数据:
OperationalError at /admin/learning_logs/example/
no such column: learning_logs_example.entry_id
Request Method: GET
Request URL: http://localhost:8000/admin/learning_logs/example/
Django Version: 1.11.7
Exception Type: OperationalError
Exception Value:
no such column: learning_logs_example.entry_id
Exception Location: C:\Users\Bryan\Desktop\LEARNI~1\ll_env\lib\site-
packages\django\db\backends\sqlite3\base.py in execute, line 328
Python Executable: C:\Users\Bryan\Desktop\LEARNI~1\ll_env\Scripts\python.exe
Python Version: 3.6.2
Python Path:
['C:\\Users\\Bryan\\Desktop\\learning log',
'C:\\Users\\Bryan\\Desktop\\LEARNI~1\\ll_env\\Scripts\\python36.zip',
'C:\\Users\\Bryan\\AppData\\Local\\Programs\\Python\\Python36-32\\DLLs',
'C:\\Users\\Bryan\\AppData\\Local\\Programs\\Python\\Python36-32\\lib',
'C:\\Users\\Bryan\\AppData\\Local\\Programs\\Python\\Python36-32',
'C:\\Users\\Bryan\\Desktop\\LEARNI~1\\ll_env',
'C:\\Users\\Bryan\\Desktop\\LEARNI~1\\ll_env\\lib\\site-packages']
Server time: Sat, 18 Nov 2017 18:36:14 +0000
出于某种原因,当我点击那个说“"例子"下面,
它说这个
我试过迁移,但它说
(venv) C:\...\learning log>python manage.py makemigrations
No changes detected
(venv) C:\...\learning log>python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
No migrations to apply.
我是如何做到的?
首先,我添加了example
条目/表单和TextField
,然后我添加了一个"示例"。我添加了一个ForeignKey
对象,其参数为Entry
。
我回去编辑我的"示例"但随后出现了异常。
编辑:
当我运行python manage.py showmigrations learning_logs
时,janos想要输出,所以这里是:
admin
[X] 0001_initial
[X] 0002_logentry_remove_auto_add
auth
[X] 001_initial
[X] 0001_initial
[X] 0002_alter_permission_name_max_length
[X] 0003_alter_user_email_max_length
[X] 0004_alter_user_username_opts
[X] 0005_alter_user_last_login_null
[X] 0006_require_contenttypes_0002
[X] 0007_alter_validators_add_error_messages
[X] 0008_alter_user_username_max_length
contenttypes
[X] 0001_initial
[X] 0002_remove_content_type_name
learning_logs
[X] 0001_initial
sessions
[X] 0001_initial
嗯,我希望有所帮助。
我重新设置了here
的异常页面答案 0 :(得分:3)
正如错误消息所示,
表entry_id
中的列learning_logs_example
不存在。
这不正常。
如果模式迁移已正确创建并正确应用,
那不应该发生这种情况。
此外,看着这个:
(venv) C:\...\learning log>python manage.py migrate Operations to perform: Apply all migrations: admin, auth, contenttypes, sessions Running migrations: No migrations to apply.
Apply all migrations
行应包含您应用的名称。
现有名称是标准的Django组件。
您的应用名称可能是learning_log
或类似名称。
简而言之,
您的应用似乎不存在迁移。
要调试这个,
首先检查您应用的showmigrations
输出:
./manage.py showmigrations learning_log
如果您没有收到错误,请将输出添加到您的问题中。
如果您收到错误CommandError: No migrations present for: ...
,
然后创建迁移:
./manage.py makemigrations learning_log
然后再次检查showmigrations
的输出,
请将输出添加到您的问题中。
如果输出如下所示:
learning_log
[X] 0001_initial
...
这意味着数据库有一些关于应用迁移的记录, 事实上,Django认为迁移是正确应用的。 (实际上它们不是,基于你的主要错误。)
根据我到目前为止的信息, 您的数据库似乎与模型不同步: 某些字段已添加到模型中而未应用于数据库, 并且没有正确保存迁移。
一个简单的解决方案是手动添加缺失的列。 您可以通过查看迁移文件找到正确的架构:
./manage.py sqlmigrate learning_log 0001
从这里你应该能够找到如何声明丢失的entry_id
字段,
然后使用查询ALTER TABLE learning_logs_example ADD COLUMN entry_id ...
手动将其添加到表中,
其余参数取决于sqlmigrate
输出中列的定义。
如果问题只有一个或几个遗漏的字段,
然后这个解决方法可能足以让一些工作。
(如果没有,请跳到下一部分。)
你不应该止步于此,
因为模型也可能需要一些索引。
您可以研究sqlmigrate
的进一步输出并重新创建依赖于learning_logs_example
的所有其他对象,
例如索引,触发器。
但更简洁的解决方案是重新创建应用程序的所有表,
遵循以下步骤:
./manage.py dumpdata learning_log > learning_log.json
./manage.py migrate --fake learning_log zero; ./manage.py migrate learning_log
./manage.py loaddata learning_log
如果手动添加列的解决方法不起作用 (你偶然发现了更复杂的问题), 那么你有两个选择:
如果你不能丢失数据,那么你必须手动追踪并解决每一个问题。完成后,您应该转储和恢复应用程序的表格,如我在上一节中所述
如果可以丢失数据,那么您可以按照上一节中的步骤进行操作,而无需执行转储和恢复步骤。也就是说,删除并重新创建应用程序的表
最后, 为了避免进一步的问题 您需要确保所有迁移都与模型同步, 并正确添加到版本控制。 测试的一个好方法是将Django项目安装在计算机上的其他文件夹中。 如果这不顺利, 然后设置仍然不好。
如果上述任何一项需要进一步澄清,请告诉我。
答案 1 :(得分:1)
这是您第一次为应用程序创建迁移吗?如果是,则需要指定应用程序名称以进行迁移:
python manage.py makemigrations my-app
答案 2 :(得分:0)
如果数据无关紧要,您可以从这里删除数据库文件:
C:\ Users \ bryan_8nva8ki \ Desktop \ learning logs \ db.sqlite3
(我从你的日志中看到了那条路径)
然后你应该再次migrate
。希望它会有所帮助!