与Heroku的Django:入门

时间:2015-08-02 14:08:18

标签: python django postgresql heroku

所以我一直在浏览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)

2 个答案:

答案 0 :(得分:0)

我认为您不包括应用模型的迁移。 如果您使用的是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,因为django< 1.7使用南迁移而不是django默认值为deprecated

答案 1 :(得分:0)

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

虽然我也会说,用户peeyush113的建议也是相关的,因为syncdb没有真正起作用,所以我不得不使用makemigrations <app>然后migrate