モデルに tags = TaggableManager(blank=True) を追加しましたが、タグで大文字と小文字を区別しないようにしたいと考えています。これを回避するためのいくつかのスニペットを見て、それを行う簡単な方法があるかどうか尋ねたかったのですか? TaggableManager のいくつかのメソッドをオーバーライドする必要がある場合は、どうすればよいか教えてください。
前もって感謝します、Arshavski Alexander。
モデルに tags = TaggableManager(blank=True) を追加しましたが、タグで大文字と小文字を区別しないようにしたいと考えています。これを回避するためのいくつかのスニペットを見て、それを行う簡単な方法があるかどうか尋ねたかったのですか? TaggableManager のいくつかのメソッドをオーバーライドする必要がある場合は、どうすればよいか教えてください。
前もって感謝します、Arshavski Alexander。
私はあなたが今までに解決策を考え出したと確信しています:)検索中に誰かがこれにぶつかる可能性があるため、答えを出しますが-
django-taggit のhttps://github.com/shacker/django-taggitバージョンを使用します。
TAGGIT_FORCE_LOWERCASE = True を構成できます
また、ストップ ワードをフィルタリングすることもできます。
このスニペットを同様の問題に使用しました。コードのコピー (後世のために転載):
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>
基本的に、最初のクエリセットをオーバーライドして、すべてのクエリセットで大文字と小文字が区別されないようにします。