我的django应用程序中的模型出现问题。
我可以创建模型的实例,但是当我去访问它时,我收到一个错误:
# create and save model instance
user_form = UserSearchForm(user=user)
user_form.save()
# Then later
first_user_form = UserSearchForm.objects.all()[0]
(1146, "Table 'project.app_tablename' doesn't exist")
Request Method: GET
Request URL: http://10.0.75.1:8000/search/
Django Version: 1.9.5
Exception Type: ProgrammingError
Exception Value:
(1146, "Table 'project.app_tablename' doesn't exist")
Exception Location: /opt/project-venv/lib/python3.4/site-packages/MySQLdb/connections.py in query, line 280
Python Executable: /opt/project-venv/bin/python
Python Version: 3.4.3
Python Path:
['/opt/project/project',
'/opt/project-venv/lib64/python34.zip',
'/opt/project-venv/lib64/python3.4',
'/opt/project-venv/lib64/python3.4/plat-linux',
'/opt/project-venv/lib64/python3.4/lib-dynload',
'/usr/lib64/python3.4',
'/usr/lib/python3.4',
'/opt/project-venv/lib/python3.4/site-packages']
Server time: Tue, 28 Mar 2017 22:50:16 +0000
我正在使用Django 1.95,我在链接的答案(https://stackoverflow.com/a/36565161/2516846)中尝试了以下内容:
但是当我运行迁移时,它会出错:
django.db.utils.ProgrammingError: relation "search_usersearchform" already exists
摘要:无法再次创建模型,因为关系已存在,但无法在我的应用中访问模型,因为它表示表格不存在
是否存在对此表/模型的引用,否则我需要删除哪些内容?如果我删除了表,删除了迁移文件夹并从db中删除了迁移,我不知道该关系是如何存在的那样
好的,终于把它整理好了。
我的项目有两个数据库,默认' db,使用postgres,以及' secondary' db,使用mysql。
当我在我的应用程序中创建新模型并运行迁移时,该表已添加到默认数据库中 这允许我创建新模型的实例。
然而,当我去访问以前保存的实例时,我得到错误,表示该表不存在。
原来这是由我的应用程序router.py引起的,它将任何查询重定向到' secondary' db,当然没有这个表。
为了解决这个问题,我在router.py中的db_for_write和db_for_read方法中添加了条件,将这些模型路由到'默认值'分贝。
答案 0 :(得分:0)
尝试删除或更改其中包含该模型的迁移文件,并注意依赖项。然后再次运行python manage.py makemigrations
和python manage.py migrate
它应该再次创建模型。 (我们正在讨论你的测试数据库吗?)
答案 1 :(得分:0)
备份models.py,从原始models.py中删除模型代码,然后运行:
python manage.py makemigrations
python manage.py migrate
然后只需恢复models.py中的模型代码并再次运行上述命令。
答案 2 :(得分:0)
遵循这些步骤应该解决它:
python manage.py makemigrations
python manage.py migrate