我无法为模型中的多个标签找到一个好的答案或解决方案。我唯一发现的就是:
How can I limit django-taggit to accept only lowercase words?
这是我目前的代码:
from taggit.managers import TaggableManager
from taggit.models import TaggedItemBase
class TaggedStory(TaggedItemBase):
content_object = models.ForeignKey("Story")
class TaggedSEO(TaggedItemBase):
content_object = models.ForeignKey("Story")
class Story(models.Model):
...
tags = TaggableManager(through=TaggedStory, blank=True, related_name='story_tags')
...
seo_tags = TaggableManager(through=TaggedSEO, blank=True, related_name='seo_tags')
答案 0 :(得分:1)
我通常在表单级别实现它:
def clean_tags(self):
"""
Force all tags to lowercase.
"""
tags = self.cleaned_data.get('tags', None)
if tags:
tags = [t.lower() for t in tags]
return tags
这实际上取决于你如何看待它。我对解决方案感到满意,因为我认为这是一个验证问题。如果您认为这是一个数据完整性问题,我可以理解为什么您希望在模型级别执行此操作。此时,最好的办法是将taggit模块子类化为可以覆盖Tag.save()的点。
答案 1 :(得分:0)
在appname-> utils文件中,例如:(blog-> init .py),定义一个函数,如下所示:
def逗号分隔符(tag_string): “”“将每个标签转换为小写”“” 如果t.strip(),则返回[t.strip()。lower()for tag_string.split(',')中的t
然后,在settings.py文件中,将默认的taggit设置定义并覆盖为: TAGGIT_TAGS_FROM_STRING ='博客。 init .comma_splitter'