0

モデル内の複数のタグに対する適切な回答または解決策が見つかりませんでした。私が近くに見つけた唯一のものはこれでした:

小文字の単語のみを受け入れるように django-taggit を制限するにはどうすればよいですか?

ここに私の現在のコードがあります:

from taggit.managers import TaggableManager
from taggit.models import TaggedItemBase


class TaggedStory(TaggedItemBase):
    content_object = models.ForeignKey("Story")


class TaggedSEO(TaggedItemBase):
    content_object = models.ForeignKey("Story")


class Story(models.Model):
    ...

    tags = TaggableManager(through=TaggedStory, blank=True, related_name='story_tags')

    ...

    seo_tags = TaggableManager(through=TaggedSEO, blank=True, related_name='seo_tags')
4

2 に答える 2

1

私は通常、フォーム レベルでこれを実装します。

def clean_tags(self):
    """
    Force all tags to lowercase.
    """
    tags = self.cleaned_data.get('tags', None)
    if tags:
        tags = [t.lower() for t in tags]

    return tags

それは本当にあなたがそれをどう見るかにかかっています。検証の問題だと思うので、解決策に満足しています。それをデータの整合性の問題だと考えるなら、なぜモデル レベルでそれを実行したいのか理解できます。その時点で最善の策は、Tag.save() をオーバーライドできるポイントまで taggit モジュールをサブクラス化することです。

于 2014-09-05T16:05:53.910 に答える