2012-07-15 108 views
4

我正在使用django创建博客。它安装在虚拟环境中,并已安装django-tagging。我正在做南迁的数据库迁移,一切似乎都适合我的迁移,但似乎标签表没有被创建,所以当我通过管理员添加一篇博文时,我得到了着名的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... 

这里是我的models.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_APP四处移动应用程序的顺序S(认为标签可能需要在我的应用程序之前),但它似乎没有任何区别。

我知道这将是简单的东西,但无法弄清楚。

谢谢 Aaron

回答

11

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

这个问题与django-tagging无关。这与南方只会迁移我告诉它迁移的事实有关!和南方一样真棒(我现在永远不会使用没有它的django项目,现在我已经找到它了) - 它不会迁移第三方应用程序。我假设南方会查看我的settings.py文件,并确定哪些已安装的应用程序需要与数据库同步,然后将它们提取出来,就像我正常运行syncdb一样。 这不是南方所做的,所以安装的每个第三方应用程序都需要自行迁移以确保其存在于数据库中。 所以,我不得不这样做,以获得表到我的数据库:

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

我敢肯定有办法把所有的迁移在一起,但我确定由一个做他们一个我小规模的东西现在 - 很高兴有人详细说明这个答案,并揭示通过单一命令同时迁移所有应用程序的最佳方式 - 有可能吗?

+0

我搞砸了,并创建了一些垃圾迁移,试图找出这个之前,我看到这个答案。要手动删除这些垃圾,我必须找到迁移的存储位置。由于它是第三方应用程序不在项目树上。我发现它存储在 /lib/python2.7/site-packages//migrations/ – Medeiros 2013-10-23 17:27:33

+0

我之前也处于类似的位置,所以感谢分享!当我添加'django.contrib.comments'并遇到同样的错误时,我遇到了麻烦。 'schema django.contrib.comments --initial'解决了它。 – 2013-10-27 19:40:22

相关问题