我向我的模型添加了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