2010-04-01 32 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將不起作用。

相關問題