2011-03-14 15 views
7

Etiketlerime etiketler = TaggableManager (blank = True) modellerini ekledim, ancak etiketlerimin büyük/küçük harfe duyarlı olmasını istiyorum. Bunun için birkaç iş parçacığı parçasını gördüm ve bunu yapmanın kolay bir yolu olup olmadığını sormak istedim. TaggableManager'dan bazı yöntemleri geçersiz kılmam gerekirse, lütfen bunu nasıl yapabilirim?django-taggit ile büyük küçük harf duyarlı etiketler yapın

Şimdiden teşekkürler, Arshavski Alexander.

cevap

-2

Benzer bir sorun için this snippet'u kullandım. (Kuşaklar için yeniden basıldı) kodu bir kopyası: bütün Sorgu kümelerini dikkate vaka duyarsız almak böylece

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> 

Temel olarak, başlangıçtaki Sorgu Kümesi geçersiz kılar. django-taggit ait

Kullanım https://github.com/shacker/django-taggit versiyonu -

+0

Lütfen aynı cevabı defalarca göndermeyin. Soru bir kopya ise, bu şekilde işaretleyin. – Mat

+0

Bu soruya gerçekten cevap vermiyor. Soru django-taggit'i içeriyor. Öneriniz temel olarak "kendi etiketleme uygulamanızı yazınız". –

3

Şimdiye kadar çözüm anladım :) birisi bu süre arama isabet edebileceğin gibi cevap koyacağız olsa eminim.

Bu TAGGIT_FORCE_LOWERCASE =

Gerçek Ayrıca durdurma sözcükleri filtrelemek için izin verir yapılandırmak için izin verir.

1

Django-taggit'in son sürümleri, tanımladığınız şekilde davranması gereken TAGGIT_CASE_INSENSITIVE ayarını destekler.

İlgili konular