繁体   English   中英

更改 django-taggit 中标签的输入方式

[英]Changing the way tags in django-taggit are input

我正在尝试 django-taggit 并且非常喜欢它。 我无法弄清楚的一件事是如何使用 filter_horizo​​ntal 选项(甚至复选框)将默认的逗号分隔标签输入更改为 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM