大家好,我真的很困惑用Django / Heroku开发我的网站。 (还使用mptt)
我收到错误:( again2是表的名称)
DoesNotExist: again2 matching query does not exist.
我在本地运行时没有出错,但是当我部署到Heroku时出现500错误。所以在Heroku和我的Django数据库之间的通信方面出了问题。但我不知道该怎么做才能解决这个问题?
我所做的事情清单(查看其他人的问题):
以下是我的观点:
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的成员。
我无法真正前进,直到我弄明白,你的帮助将不胜感激,如果还有什么需要请告诉我,请提前谢谢
答案 0 :(得分:2)
这与迁移,需求文件或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
确认您的数据库没有此记录现在提出一些未经请求的建议。请养成用大写字母开始上课名字的习惯。
更新:迁移
Django migrations是管理架构的一种无痛方式。一种简单的方法来更改模型并将它们反映在数据库中。应用迁移不会导致一台服务器的数据被移动到另一台服务器。为此你需要
./manage.py dumpdata > dumpfile.json
./manage.py loaddata dumpfile.json
或者您可以使用更高效的posgresql COPY FROM / TO。
答案 1 :(得分:0)
这将解决您的问题:
首先,从终端在项目根目录中运行此命令:
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管理员,并验证数据库对象已成功传输。
希望它有所帮助!