Skip to main content
 首页 » 编程设计

python之无法从部署的 Heroku 应用程序中的 Django 数据库中检索

2024年10月01日33webabcd

大家好,我真的很想用 Django/Heroku 开发我的网站。 (并且还使用 mptt)

我收到错误:(同样 2 是表的名称)

  DoesNotExist: again2 matching query does not exist. 

当我在本地运行时没有出现错误,但当我部署到 Heroku 时出现 500 错误。所以在 Heroku 和我的 Django 数据库之间的通信方面出了点问题。但我不知道该怎么做才能解决这个问题?

我做过的事情 list (看别人的问题):

  • python manage.py makemigrations 然后是 git commit,推送到 heroku 和 heroku run manage.py migrate
  • 我已经将“django.contrib.sites”导入到我安装的应用程序中,我将我的 herokuapp url 保存为站点对象
  • 我有一个更新的 requirements.txt
  • heroku 在它为应用程序 (heroku postgres) 创建的数据库中似乎有“数据”和表格

以下是我的观点:

 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 确认您的数据库中没有此记录

现在寻求一些不请自来的建议。请养成类名以大写字母开头的习惯。

更新:迁移

Django migrations是一种管理模式的无痛方式。一种对模型进行更改并将其反射(reflect)在数据库中的简单方法。应用迁移不会导致数据从一台服务器移动到另一台服务器。为此你需要

./manage.py dumpdata > dumpfile.json 
./manage.py loaddata dumpfile.json 

或者你可以使用更高效的posgresql COPY FROM/TO。