2010-04-01 44 views
2

我想添加一个StackOverflow风格的标签输入到我的博客模型。这是一个已经有很多数据的模型。为现有模型添加标签,现在它的管理员如何工作?

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

try: 
    tagging.register(BlogPost) 
except tagging.AlreadyRegistered: 
    pass 

我认为这是我所需要的,所以我通过我的博客文章的旧数据库中去(这是一个新移植的博客)和复制的标签。它的工作,我可以按标签显示标签和过滤器。

但是,我刚刚写了一个新的BlogPost,并意识到那里没有标签字段。

阅读文档(巧合的是,足够干,可用作止汗药),我找到了TagField。我认为这只是现有标记寄存器上的管理员风格层,我添加了它。它抱怨没有标签栏。

我宁愿不标准化标签只是为了满足创建一个接口来输入它们。是否有我可以在模型上设置的TagManager类?

tags = TagManager() # or somesuch 

回答

2

您是否尝试在模型中使用TagField()而不是注册模型?

from tagging.fields import TagField 

class BlogPost(models.Model): 
    # ... 
    tags = TagField() 
+0

我没有这样做,而是想到了它,我也这样做了*。我会检查TagField,但没有注册表。 – Oli 2010-04-01 15:55:05

+0

同样的错误:没有这样的列:post_blogpost.tags我知道它只是想我添加一个新的字符列到我的数据库表...我的观点是,为什么我应该?所有的实际标签都应该存储在标签应用的模型中。我不想用这样的困难依赖来扼杀我的模型。 – Oli 2010-04-01 15:56:04

+0

我记得现在,你强烈地把归一化转化为11.可能是让时间让django-tagging做它想做的事情或者推出自己的标签库。 – istruble 2010-04-01 19:19:22

0

像istruble说(对不起,我不能评论以上): 你有没有尝试在模型中使用TagField(),而不是注册的模式?

from tagging.fields import TagField 

class BlogPost(models.Model): 
    # ... 
    tags = TagField() 

但之后,你必须改变你的数据库表。我会建议做一个数据库的备份。然后运行manage.py reset APPNAME检查表格是如何改变的。恢复备份并尝试修改表格,使其看起来像新的一样。这样你就不会丢失你的数据;)

请记住,由于表格已经存在,syncdb将不起作用。

相关问题