【Django】Django-taggitをUUIDに対応させる
Django-taggitはそのままではuuidのモデルには対応していません。
taggit_taggeditemテーブルは以下のようになっています。
object_idにuuidとしているpkの値が入るのですが、object_idはinteger型なので、
このままタグ追加すると、以下のようなエラーになります。
DataError: integer out of range
対処方法としてはtaggit_taggeditemテーブルではなく、uuid用のtaggit_taggeditemテーブルを新たに作る感じです。
以下、ソース。必要な修正部分のソースのみ載せています。
[models.py]
from taggit.models import GenericUUIDTaggedItemBase, TaggedItemBase, TagBase
# taggit_taggeditemテーブルの代わりにUUIDTaggedItemテーブルを作る
class UUIDTaggedItem(GenericUUIDTaggedItemBase, TaggedItemBase):
"""
UUIDをpkとしているmodelをdjango-taggitに対応させる
"""
class Meta:
verbose_name = ("Tag")
verbose_name_plural = ("Tags")
class Foo(models.Model):
# 各種フィールド定義
id = models.UUIDField(primary_key=True, default=uuid4, editable=False)
# through=UUIDTaggedItemでUUIDTaggedItemテーブルに保存されるようにする
tags = TaggableManager(through=UUIDTaggedItem, blank=True)
こうすることで、「UUIDTaggedItem」テーブルができて、object_idがuuid型となります。
ディスカッション
コメント一覧
まだ、コメントがありません