south没有为第三方安装的应用程序创建表



我正在使用django创建博客。它安装在一个虚拟环境中,并且已经安装了django标记。我正在用south进行数据库迁移,我的迁移似乎一切正常,但标记表似乎没有创建,所以当我通过管理员添加博客文章时,我会收到著名的postgresql错误:

Exception Type: DatabaseError at /admin/bppsite/blogpost/add/
Exception Value: relation "tagging_tag" does not exist
LINE 1: ...ECT "tagging_tag"."id", "tagging_tag"."name" FROM "tagging_t...

以下是我的模型的相关部分。py:

from south.modelsinspector import add_introspection_rules
add_introspection_rules([], ["^tagging.fields.TagField"])
from tagging.models import Tag
from tagging.fields import TagField
class BlogPost(models.Model):
    title = models.CharField(max_length = 255)
    text = models.TextField()
    author = models.ForeignKey(User)
    created = models.DateTimeField(auto_now_add = True)
    modified = models.DateTimeField(auto_now = True)
    status = models.CharField(max_length = 10, choices=POST_STATUS_CHOICES,     default='DRAFT')
    slug = models.SlugField(max_length = 255, blank=True)
    category = models.ManyToManyField(Category)
    tags = TagField()
    def __unicode__(self):
        return self.title
    class Meta:
        ordering = ["-created"]
    def save(self):
        if not self.id:
            self.slug = slugify(self.title)
        super(BlogPost, self).save()
    def set_tags(self, tags):
        Tag.objects.update_tags(self, tags)
    def get_tags(self, tags):
        return Tag.objects.get_for_object(self)

和,从settings.py:安装的应用程序

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # Uncomment the next line to enable the admin:
    'django.contrib.admin',
    # Uncomment the next line to enable admin documentation:
    # 'django.contrib.admindocs',
    'south',
    'tinymce',
    'tagging',
    'bppsite',
)

我曾尝试在INSTALLED_apps中移动应用程序的顺序(认为标记可能需要在我的应用程序之前),但似乎没有任何区别。

我知道这将是一件简单的事情,但我想不通。

谢谢Aaron

好。我简直不敢相信它有多简单,答案就在我面前。然而,如果其他人碰巧处于同样的位置,希望他们会偶然发现这个问题,我现在会自己回答。

这个问题与django标签无关。这是因为南方只会迁移我告诉它要迁移的东西!和south一样棒(现在我已经找到了django项目,如果没有它,我永远不会使用它)——它不会迁移第三方应用程序。我以为south会查看我的设置.py,找出哪些安装的应用程序需要与数据库同步,然后拿起它们,就好像我只是在正常运行syncdb一样。这不是south所做的,所以每个安装的第三方应用程序都需要自己迁移,以确保它存在于数据库中。所以,我所要做的就是将这些表放入我的数据库:

./manage.py schemamigration tagging --initial
./manage.py migrate tagging

我相信有一种方法可以将所有的迁移集中在一起,但我现在可以针对我的小规模工作逐一进行迁移——很高兴有人详细说明这个答案,并揭示用一个命令同时迁移所有应用程序的最佳方法——这可能吗?

最新更新