迁移后Django表不存在

时间:2019-06-01 16:18:35

标签: python django

我正在使用Django + Python 3.7在Google App Engine中开发一个测试应用程序;我成功启动了测试应用程序,并在本地和应用程序引擎服务器上创建了一个新应用程序。 现在,我正在尝试创建更复杂的模型。 我创建了模型+视图+ url文件和模板,并进行了迁移(显然很成功),但是如果我尝试在本地服务器上可视化模板,则会检索到此错误:

位于/的ProgrammingError (1146,“表'djangoseo.keywords_keywords'不存在”)

我试图再次迁移模型,但使用syncdb命令失败。

这是模型

from django.db import models


class Keywords(models.Model):
    keyword_name = models.CharField(max_length=200)
    keyword_tags = models.ManyToManyField('Tags')
    keyword_urls = models.ManyToManyField('Urls', through='Rankings')
    avg_volume = models.IntegerField(default=0)
    jan_volume = models.IntegerField(default=0)
    feb_volume = models.IntegerField(default=0)
    mar_volume = models.IntegerField(default=0)
    apr_volume = models.IntegerField(default=0)
    may_volume = models.IntegerField(default=0)
    jun_volume = models.IntegerField(default=0)
    jul_volume = models.IntegerField(default=0)
    aug_volume = models.IntegerField(default=0)
    sep_volume = models.IntegerField(default=0)
    oct_volume = models.IntegerField(default=0)
    nov_volume = models.IntegerField(default=0)
    dec_volume = models.IntegerField(default=0)
    intent = models.CharField(max_length=200)
    micromoment = models.CharField(max_length=200)
    language = models.CharField(max_length=200)
    addedby = models.CharField(max_length=200)

    def __str__(self):
        return self.keyword_name

class Tags(models.Model):
    tag_name = models.CharField(max_length=200)
    addedby = models.CharField(max_length=200)

    def __str__(self):
        return self.tag_name

class Urls(models.Model):
    url_name = models.CharField(max_length=300)
    domain = models.CharField(max_length=200)

    def __str__(self):
        return self.url_name

class Rankings(models.Model):
    keyword = models.ForeignKey(Keywords, on_delete=models.CASCADE)
    url = models.ForeignKey(Urls, on_delete=models.CASCADE)
    date_ranking = models.DateTimeField()
    ranking = models.IntegerField(default=0)

    def __str__(self):
        return self.ranking'''

这是视图

from django.views import generic

from .models import Keywords


class IndexView(generic.ListView):
    template_name = 'keywords/index.html'
    context_object_name = 'keywords_list'

    def get_queryset(self):
        """Return the first ten keywords."""
        return Keywords.objects.order_by('keyword_name')[:10]

这是index.html的模板

{% if keywords_list %}
<ul>
{% for keyword in keywords_list %}
    <li>{{ keyword.keyword_name }}</li>
{% endfor %}
</ul>
{% else %}
<p>No keywords are available.</p>
{% endif %}

我检索到此错误:

ProgrammingError at / (1146, "Table 'djangoseo.keywords_keywords' doesn't exist") Request Method: GET Request URL: http://localhost:8000/

我该如何解决?我为什么得到它?

1 个答案:

答案 0 :(得分:0)

如果您尚未完成initial migration,则可能是问题所在。请先遵循链接的初始迁移文档,以确保已完成此操作。

如果您已完成初始迁移,则需要检查以确保运行时

python manage.py makemigrations

您在模块的yourmodule/migrations/目录中收到了migration file。如果该文件不存在,则需要仔细检查makemigrations的语法,并确保您正在从manage.py文件所在的目录中运行命令。

如果有迁移文件,则需要运行migrate

python manage.py migrate

以将其应用于数据库。为了确保它适用,请检查数据库中是否有名为djangomigrations的表,然后运行select * from djangomigrations order by id desc;。如果您在表中看到文件名,那应该很好。