我向我的模型添加了tags = TaggableManager(blank = True),但我希望我的标签不区分大小写。 我看到一些关于这方面的工作片段,想问问是否有一个简单的方法来做到这一点? 如果我必须重写TaggableManager中的某些方法,请告诉我该怎么做?使用django-taggit使区分大小写的标签
在此先感谢, Arshavski亚历山大。
我向我的模型添加了tags = TaggableManager(blank = True),但我希望我的标签不区分大小写。 我看到一些关于这方面的工作片段,想问问是否有一个简单的方法来做到这一点? 如果我必须重写TaggableManager中的某些方法,请告诉我该怎么做?使用django-taggit使区分大小写的标签
在此先感谢, Arshavski亚历山大。
我已经使用this snippet来解决类似的问题。代码的副本(重印后人):
from django.db.models import Manager
from django.db.models.query import QuerySet
class CaseInsensitiveQuerySet(QuerySet):
def _filter_or_exclude(self, mapper, *args, **kwargs):
# 'name' is a field in your Model whose lookups you want case-insensitive by default
if 'name' in kwargs:
kwargs['name__iexact'] = kwargs['name']
del kwargs['name']
return super(CaseInsensitiveQuerySet, self)._filter_or_exclude(mapper, *args, **kwargs)
# custom manager that overrides the initial query set
class TagManager(Manager):
def get_query_set(self):
return CaseInsensitiveQuerySet(self.model)
# and the model itself
class Tag(models.Model):
name = models.CharField(maxlength=50, unique=True, db_index=True)
objects = TagManager()
def __str__(self):
return self.name
# now...
>>> tag = Tag(name='test')
>>> tag.save()
>>> Tag.objects.get(name='TEST')
<Tag: test>
基本上,你覆盖初始查询集,使所有的查询集采取不区分大小写考虑在内。
我相信你现在已经想通了解决方案:)虽然我会把答案有人可能会打击这一点的同时搜索 -
使用https://github.com/shacker/django-taggit版本Django的taggit的。
它允许配置TAGGIT_FORCE_LOWERCASE =真
它也可以过滤停用词。
最近版本的django-taggit支持TAGGIT_CASE_INSENSITIVE
设置,它应该按照您描述的方式运行。
请不要多次发布完全相同的答案。如果问题是重复的,则将其标记为这样。 – Mat 2011-06-24 04:35:53
这并没有真正回答这个问题。这个问题涉及django-taggit。你的建议基本上是“编写你自己的标签应用程序”。 – 2011-07-04 23:18:57