无法从部署的 Heroku 应用程序中的 Django 数据库中检索
Unable to retrieve from Django database in deployed Heroku App
大家好,我真的很想用 Django/Heroku 开发我的网站。 (也使用 mptt)
我收到错误消息:(同样 2 是 table 的名称)
DoesNotExist: again2 matching query does not exist.
我在本地 运行 时没有收到任何错误,但当我部署到 Heroku 时收到 500 错误。所以在 Heroku 和我的 Django 数据库之间的通信方面出了点问题。但我不知道该怎么做才能解决这个问题?
我做过的事情清单(看别人的问题):
- python manage.py makemigrations 后跟 git commit,推送到 heroku 和 heroku 运行 manage.py migrate
- 我已经将“'django.contrib.sites'导入到我安装的应用程序中,我将我的 herokuapp url 保存为站点对象
- 我更新了 requirements.txt
- heroku 在它为应用程序 (heroku postgres) 创建的数据库中似乎有 'data' 和 table
以下是我的观点:
def topic_detail(request, x):
text1 = str(again2.objects.get(pk='Top').get_children())
return render(request, 'things/topic_detail.html', {
'text1': text1,
})
在本地这会起作用,在部署时它会给出错误,如果我将 text1 替换为 again2.objects.all() 它会在本地显示内容但在部署到 heroku 时不会显示任何内容(没有错误) ) 基本上我想做的是(现在)展示 Top 的子级,它是 again2 的成员。
在我弄清楚之前我无法真正前进,非常感谢您的帮助,如果您有任何其他需要请告诉我,提前谢谢您
这与迁移、需求文件或 virtualenvs 无关。 DoesNotExist
只代表一件事。该对象在您的数据库中不存在。当您以这种方式使用 .get 时,您应该始终将其包装在 try expect 中或使用 get_object_or_404 而不是
def topic_detail(request, x):
try:
text1 = str(again2.objects.get(pk='Top').get_children())
return render(request, 'things/topic_detail.html', {
'text1': text1,
})
except again2.DoesNotExist
raise Http404
或更简洁
text = get_object_or_404(again2, pk='Top')
您可以使用cli
确认您的数据库中没有这条记录
现在寻求一些不请自来的建议。请养成 class 名称以大写字母开头的习惯。
更新:迁移
Django migrations 是管理模式的一种轻松方式。一种对模型进行更改并将其反映在数据库中的简单方法。应用迁移不会导致数据从一台服务器移动到另一台服务器。为此你需要
./manage.py dumpdata > dumpfile.json
./manage.py loaddata dumpfile.json
或者你可以使用 posgresql COPY FROM/TO 这样效率更高
这将解决您的问题:
首先,运行 从项目根目录中的终端:
python3 manage.py dumpdata > dumpfile.json
然后部署到Heroku。 (我假设你知道这一点)
部署后,运行 从您的项目根目录中的终端:
heroku run bash
这将启动 heroku bash,您可以在其中键入 ls
查看托管文件。您现在可以在这里看到 dumpfile.json
运行 python3 manage.py loaddata dumpfile.json
这会将您的所有对象传输到 Heroku 数据库。
同样要在您的 Django 管理员中查看相同内容,您需要再次在 Heroku bash 中创建超级用户并设置凭据。
python3 manage.py createsuperuser
然后设置用户名、邮箱和密码。
现在您可以转到您的 Django 管理员并验证数据库对象传输是否成功。
希望对您有所帮助!
大家好,我真的很想用 Django/Heroku 开发我的网站。 (也使用 mptt)
我收到错误消息:(同样 2 是 table 的名称)
DoesNotExist: again2 matching query does not exist.
我在本地 运行 时没有收到任何错误,但当我部署到 Heroku 时收到 500 错误。所以在 Heroku 和我的 Django 数据库之间的通信方面出了点问题。但我不知道该怎么做才能解决这个问题?
我做过的事情清单(看别人的问题):
- python manage.py makemigrations 后跟 git commit,推送到 heroku 和 heroku 运行 manage.py migrate
- 我已经将“'django.contrib.sites'导入到我安装的应用程序中,我将我的 herokuapp url 保存为站点对象
- 我更新了 requirements.txt
- heroku 在它为应用程序 (heroku postgres) 创建的数据库中似乎有 'data' 和 table
以下是我的观点:
def topic_detail(request, x):
text1 = str(again2.objects.get(pk='Top').get_children())
return render(request, 'things/topic_detail.html', {
'text1': text1,
})
在本地这会起作用,在部署时它会给出错误,如果我将 text1 替换为 again2.objects.all() 它会在本地显示内容但在部署到 heroku 时不会显示任何内容(没有错误) ) 基本上我想做的是(现在)展示 Top 的子级,它是 again2 的成员。
在我弄清楚之前我无法真正前进,非常感谢您的帮助,如果您有任何其他需要请告诉我,提前谢谢您
这与迁移、需求文件或 virtualenvs 无关。 DoesNotExist
只代表一件事。该对象在您的数据库中不存在。当您以这种方式使用 .get 时,您应该始终将其包装在 try expect 中或使用 get_object_or_404 而不是
def topic_detail(request, x):
try:
text1 = str(again2.objects.get(pk='Top').get_children())
return render(request, 'things/topic_detail.html', {
'text1': text1,
})
except again2.DoesNotExist
raise Http404
或更简洁
text = get_object_or_404(again2, pk='Top')
您可以使用cli
确认您的数据库中没有这条记录现在寻求一些不请自来的建议。请养成 class 名称以大写字母开头的习惯。
更新:迁移
Django migrations 是管理模式的一种轻松方式。一种对模型进行更改并将其反映在数据库中的简单方法。应用迁移不会导致数据从一台服务器移动到另一台服务器。为此你需要
./manage.py dumpdata > dumpfile.json
./manage.py loaddata dumpfile.json
或者你可以使用 posgresql COPY FROM/TO 这样效率更高
这将解决您的问题:
首先,运行 从项目根目录中的终端:
python3 manage.py dumpdata > dumpfile.json
然后部署到Heroku。 (我假设你知道这一点)
部署后,运行 从您的项目根目录中的终端:
heroku run bash
这将启动 heroku bash,您可以在其中键入 ls
查看托管文件。您现在可以在这里看到 dumpfile.json
运行 python3 manage.py loaddata dumpfile.json
这会将您的所有对象传输到 Heroku 数据库。
同样要在您的 Django 管理员中查看相同内容,您需要再次在 Heroku bash 中创建超级用户并设置凭据。
python3 manage.py createsuperuser
然后设置用户名、邮箱和密码。 现在您可以转到您的 Django 管理员并验证数据库对象传输是否成功。
希望对您有所帮助!