[英]Changing the way tags in django-taggit are input
我正在嘗試 django-taggit 並且非常喜歡它。 我無法弄清楚的一件事是如何使用 filter_horizontal 選項(甚至復選框)將默認的逗號分隔標簽輸入更改為 django 默認的多對多字段。 這對我想做的事情更有意義,因為我只希望管理員能夠創建標簽,內容制作者只需從可用標簽中進行選擇
在這里找到了一個類似的問題
在 Taggit 中使用復選框
但我無法理解必須將什么插入到哪里才能實現
沒有時間嘗試了解 taggit 的實際工作原理以滿足我的需要,因此我想出了一個快速的解決方法 - 在模型中創建一個方法來檢索所有可用的標簽並將它們顯示在幫助文本中標簽字段。
tags = TaggableManager(blank=True, help_text = tag_helptext())
def tag_helptext():
help_text = "Options: "
for t in Tag.objects.all():
help_text += t.name + " ||| "
return help_text
然后在管理員中,我刪除了為除超級用戶之外的所有人創建新標簽的權限。
感覺有點 hackish,但提供了我需要的東西(讓用戶更容易使用現有標簽並避免他們創建新標簽)
我遇到了同樣的問題,所以無論如何我都會發布以分享我的解決方案。 摘自本文檔的第 7.2 點
要提供您自己的解析器,請編寫一個接受標簽字符串並返回標簽名稱列表的函數。 例如,一個用逗號分割並轉換為小寫的簡單函數:
def comma_splitter(tag_string):
return [t.strip().lower() for t in tag_string.split(',') if t.strip()]
您需要通過添加新設置TAGGIT_TAGS_FROM_STRING
並為其提供函數的虛線路徑來告訴 taggit 使用此函數而不是默認函數。 同樣,您可以提供將標簽列表轉換為字符串表示形式的函數,並使用設置TAGGIT_STRING_FROM_TAGS
覆蓋默認值(即taggit.utils._edit_string_for_tags
):
def comma_joiner(tags):
return ', '.join(t.name for t in tags)
如果上述函數是在模塊 appname.utils 中定義的,那么您的項目 settings.py 文件應包含以下內容:
TAGGIT_TAGS_FROM_STRING = 'appname.utils.comma_splitter'
TAGGIT_STRING_FROM_TAGS = 'appname.utils.comma_joiner'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.