Python 在现有模型中添加了标记,现在它的管理员是如何工作的?

Python 在现有模型中添加了标记,现在它的管理员是如何工作的?,python,django,django-admin,django-tagging,Python,Django,Django Admin,Django Tagging,我想将StackOverflow样式的标记输入添加到我的博客模型中。这是一个已经有很多数据的模型 class BlogPost(models.Model): # my blog fields try: tagging.register(BlogPost) except tagging.AlreadyRegistered: pass 我认为这就是我所需要的,所以我浏览了我以前的博客文章数据库(这是一个新移植的博客),并将标签复制到了中。它起作用了,我可以显示标签并按标签

我想将StackOverflow样式的标记输入添加到我的博客模型中。这是一个已经有很多数据的模型

class BlogPost(models.Model):
    # my blog fields

try:
    tagging.register(BlogPost)
except tagging.AlreadyRegistered:
    pass
我认为这就是我所需要的,所以我浏览了我以前的博客文章数据库(这是一个新移植的博客),并将标签复制到了中。它起作用了,我可以显示标签并按标签过滤

然而,我刚刚写了一篇新的博文,意识到这里没有标签字段

阅读文档(巧合的是,足够干燥,可以用作止汗剂),我发现了标记字段。我认为这只是现有标记寄存器上的一个管理器样式的层,所以添加了它。它抱怨没有标签栏

我不希望仅仅为了满足创建一个输入它们的接口而对标记进行非规范化。是否有可以在模型上设置的TagManager类

    tags = TagManager() # or somesuch
from tagging.fields import TagField

class BlogPost(models.Model):
    # ...
    tags = TagField()
from tagging.fields import TagField

class BlogPost(models.Model):
    # ...
    tags = TagField()
您是否尝试在模型中使用TagField()而不是注册模型

    tags = TagManager() # or somesuch
from tagging.fields import TagField

class BlogPost(models.Model):
    # ...
    tags = TagField()
from tagging.fields import TagField

class BlogPost(models.Model):
    # ...
    tags = TagField()
正如istruble所说(对不起,我不能在上面发表评论): 您是否尝试在模型中使用TagField()而不是注册模型

    tags = TagManager() # or somesuch
from tagging.fields import TagField

class BlogPost(models.Model):
    # ...
    tags = TagField()
from tagging.fields import TagField

class BlogPost(models.Model):
    # ...
    tags = TagField()
但在此之后,您必须更改数据库表。我建议您备份数据库。然后运行
manage.py reset APPNAME
检查表是如何更改的。还原备份并尝试更改表,使其看起来像新的表。这样,您就不会丢失数据;)


请记住,syncdb将无法工作,因为表已准备就绪。

我没有这样做,想想看,我也这么做了。我将使用标记字段进行检查,但不使用寄存器。同样的错误:没有这样的列:post_blogpost.tags我知道它只是想让我在数据库表中添加一个新的char列。。。我的意思是,我为什么要这样做?所有实际标签都应存储在标签应用程序的模型中。我不想用这样的硬依赖性来破坏我的模型。我记得现在,您强烈希望将规范化设置为11。也许是时候让步,让django tagging做它想做的事情,或者推出自己的标签库了。