2011-03-14 50 views
7

我向我的模型添加了tags = TaggableManager(blank = True),但我希望我的標籤不區分大小寫。 我看到一些關於這方面的工作片段,想問問是否有一個簡單的方法來做到這一點? 如果我必須重寫TaggableManager中的某些方法,請告訴我該怎麼做?使用django-taggit使區分大小寫的標籤

在此先感謝, Arshavski亞歷山大。

回答

-2

我已經使用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> 

基本上,你覆蓋初始查詢集,使所有的查詢集採取不區分大小寫考慮在內。

+0

請不要多次發佈完全相同的答案。如果問題是重複的,則將其標記爲這樣。 – Mat 2011-06-24 04:35:53

+0

這並沒有真正回答這個問題。這個問題涉及django-taggit。你的建議基本上是「編寫你自己的標籤應用程序」。 – 2011-07-04 23:18:57

3

我相信你現在已經想通了解決方案:)雖然我會把答案有人可能會打擊這一點的同時搜索 -

使用https://github.com/shacker/django-taggit版本Django的taggit的。

它允許配置TAGGIT_FORCE_LOWERCASE =真

它也可以過濾停用詞。

1

最近版本的django-taggit支持TAGGIT_CASE_INSENSITIVE設置,它應該按照您描述的方式運行。