2011-03-14 5 views
7

태그에 TaggableManager (blank = True) 태그를 추가했지만 모델에서 대소 문자를 구분하지 않길 바랍니다. 나는 이것을 해결하기위한 몇 가지 발췌본을 보았고 그것을 할 수있는 쉬운 방법이 있는지 물어보고 싶었습니다. TaggableManager에서 일부 메서드를 재정의해야 할 경우 어떻게해야합니까?django-taggit으로 대소 문자를 구별하지 않는 태그 만들기

미리 감사드립니다. Arshavski Alexander.

답변

-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> 

기본적으로, 초기의 검색어를 우선합니다. 장고 - taggit의

사용 https://github.com/shacker/django-taggit 버전 -

+0

동일한 답변을 여러 번 게시하지 마십시오. 질문이 중복 된 경우 해당 질문을 그대로 사용하십시오. – Mat

+0

이것은 실제로 질문에 대답하지 않습니다. 문제는 django-taggit입니다. 귀하의 제안은 기본적으로 "자신 만의 태깅 앱 작성"입니다. –

3

난 당신이 지금 해결책을 알아 낸 : 사람이 동안의 검색을 칠 하듯이 내가 대답을 넣어 것입니다하지만 확신합니다.

그것은 TAGGIT_FORCE_LOWERCASE =

사실 그것은 또한 당신이 중지 단어를 필터링 할 수 있습니다 구성 할 수 있습니다.

1

django-taggit의 최신 버전은 설명하는대로 동작해야하는 TAGGIT_CASE_INSENSITIVE 설정을 지원합니다.

관련 문제