【问题标题】:Django with Heroku: Getting startedDjango 与 Heroku:入门
【发布时间】:2015-10-24 16:44:51
【问题描述】:

所以我一直在整个互联网上阅读 Heroku 的开发中心,这里是 Stack Overflow,我不知道如何使用我的 Django 项目在 Heroku 上进行基本的工作。

我的主要问题是让 Postgres 数据库正常工作。我运行heroku run python manage.py syncdb,它说它会进行迁移,甚至创建一个超级用户,但是当我开始使用我部署的应用程序时,我得到了臭名昭著的“关系不存在”错误。

阅读我发现你必须在我的本地计算机上使用我的本地数据库运行python manage.py migrate,然后运行heroku run python manage.py syncdbheroku run python manage.py migrate。我很困惑是否真的是这种情况,以及当我使用 virtualenv 时是否仍然如此。

编辑:这是抛出“关系不存在错误”的相关视图以及使用的相应模型。

models.py

class Location(models.Model):
    name = models.CharField(max_length=100)
    route = models.ForeignKey('Route', null=True, blank=True)

    client = models.CharField(max_length=50)

    def __unicode__(self):
        return u'%s, route: %s' % (self.name, self.route)


class Route(models.Model):
    name = models.CharField(max_length=100)

    client = models.CharField(max_length=50)

    def __unicode__(self):
        return u'%s' % self.name

serializers.py

from rest_framework import serializers
from .models import Route, Location


class LocationSerializer(serializers.ModelSerializer):
    class Meta:
        model = Location
        fields = ('pk', 'client', 'name')


class RouteSerializer(serializers.ModelSerializer):
    location_set = LocationSerializer(many=True)

    class Meta:
        model = Route
        fields = ('pk', 'client', 'name', 'location_set')

views.py

from .models import Location, Route
from .serializers import RouteSerializer, LocationSerializer
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status

class RouteList(APIView):
    def get(self, request, format=None):
        client = request.user.groups.all()[0]

        routes = Route.objects.filter(client=client)
        serializer = RouteSerializer(routes, many=True)
        return Response(serializer.data)

【问题讨论】:

  • 是的,我一开始就跟着信,导致我出现“关系不存在”的错误。
  • 您遇到的错误不是因为部署问题。这是您的模型和/或视图的问题。请发布整个错误、相关模型和引发错误的视图。
  • 我已经用相关代码编辑了我的原始帖子,但我也想知道为什么我的管理站点不包括我通过admin.site.register(modelname)注册的模型?

标签: python django postgresql heroku


【解决方案1】:

我认为您不包括应用模型的迁移。 如果您使用的是 django 1.8,则可以运行以下命令在本地生成迁移,

python manage.py makemigrations

将迁移添加到 git 并部署到 heroku。 在 heroku 上运行迁移,

heroku run bash -a 'HEROKU_APP_NAME'
python manage.py migrate

如果您使用 django>=1.7,则不应使用 syncdb,因为 djangodeprecated。

【讨论】:

    【解决方案2】:

    所以我自己想通了,问题是我忘记通过startapp 创建一个应用程序,只是将我所有的模型、序列化程序等放在项目目录中。一旦我创建了一个应用程序,将所有内容移动到应用程序的文件夹中,并调整了所有的导入和路径,一切正常。

    虽然我还要说,用户 peeyush113 的建议也很重要,因为 syncdb 并没有真正起作用,所以我不得不使用makemigrations <app>,然后使用migrate

    【讨论】:

      猜你喜欢
      • 2013-03-21
      • 2014-05-30
      • 2022-01-08
      • 2011-11-03
      • 1970-01-01
      • 2014-07-23
      • 2013-02-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多