質問

Tags = taggablemanager(blank = true)をモデルに追加しましたが、タグをケース非感受性にしたいと考えています。私はこれのためにいくつかのスニペットの回避策を見て、それをする簡単な方法があるかどうか尋ねたかったのですか? TaggableManagerからいくつかの方法をオーバーライドする必要がある場合は、どうすればいいですか?

事前に、Arshavski Alexander。

役に立ちましたか?

解決

利用した このスニペット 同様の問題について。コードのコピー(後世のために転載):

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>

基本的に、すべてのQuerysetsが症例の不感を考慮に入れるように、最初のQuerysetをオーバーライドします。

他のヒント

私はあなたが今までに解決策を理解したと確信しています:)私は誰かが検索中にこれにヒットするかもしれないので答えを出します -

使用する https://github.com/shacker/django-taggit Django-Taggitのバージョン。

taggit_force_lowercase = trueを構成できます

また、ストップワードをフィルタリングすることもできます。

Django-Taggitサポートの最近のバージョンa TAGGIT_CASE_INSENSITIVE 設定、それはあなたが説明している方法で動作するはずです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top