Python Django与Heroku:开始

Python Django与Heroku:开始,python,django,postgresql,heroku,Python,Django,Postgresql,Heroku,所以我一直在阅读Heroku的开发中心,这里是Stack Overflow,在整个互联网上,我不知道如何让我的Django项目基本上在Heroku上工作 我的主要问题是让Postgres数据库正常工作。我运行了heroku运行python manage.py syncdb,它说它进行了迁移,甚至创建了一个超级用户,但当我使用部署的应用程序时,我得到了臭名昭著的“关系不存在”错误 阅读本文,我发现您必须在本地计算机上使用本地数据库运行python manage.py migrate,然后运行her

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

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

阅读本文,我发现您必须在本地计算机上使用本地数据库运行
python manage.py migrate
,然后运行
heroku run python manage.py syncdb
heroku run python manage.py migrate
。当我使用virtualenv时,我很困惑这是否是事实,是否仍然是事实

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

型号.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
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')
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)
序列化程序.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
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')
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)
视图.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
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')
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)

我认为您没有包括应用程序型号的迁移。 如果您使用的是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是这样的我认为您没有包括应用程序模型的迁移。 如果您使用的是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是这样的,所以我自己解决了这个问题,问题是我忘了通过
startapp
创建一个应用程序,而只是将我所有的模型、序列化程序等放在项目目录中。一旦我创建了一个应用程序,将所有内容移动到该应用程序的文件夹中,并调整了所有导入和路径,所有内容都正常工作


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

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


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

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