Django

DjangoのModelにSlugFieldを利用する。その利用方法と

以前の記事で、DjangoのModelのフィールドについて説明しました。今回は、DjangoのModelのFieldの一つのSlugFieldについて説明します。このSlugFieldは文字とハイフン、数字、アンダースコアだけを含んだ文字列です。主にURLに利用されるフィールドです。

SlugFieldの設定と挿入のしかた

SlugFieldとは、Djangoで利用されるFieldの一つです。

以下のようなフィールドです。

フィールド名 概要 DBでのデフォルトのカラム定義(sqlite)
SlugField 文字、ハイフン、アンダースコア、数字のみの文字列URLに利用される。 varchar(50)
  • SlugField宣言時に、max_fieldを指定しない場合デフォルトで50が最大になります。
  • null=True, blank=Trueなどと指定しないと、デフォルトの値の入力を求められます。
  • デフォルトで自動的にインデックスが作成されます。

実際にソースコードを見ます。

利用する場合には、以下のようにするのがいいかと思います。

urls.pyでslugの値をurlでキーと指定して、view(またはmodel)でslugをキーに値を取得する(slugはurlに入力できる値であり、slugフィールドにはインデックスがあるため高速でレコードを取得できる)

また、slugifyに値を挿入するには、文字列をslugifyの形式に変換することが必要です。
そのためには、django.utils.text.slugifyを利用します。

from django.utils.text import slugify

slugify(‘aa bb’)
#aa-bb

slugify(‘aabb’)
#aabb

slugify(‘Aabb’)
#aabb

slugify(‘abcあいうえお’)
# abc

slugify(‘abcあいうえお’, allow_unicode=True)
#abcあいうえお

slugify(‘abc(全角スペース)あいうえお’, allow_unicode=True)
#abc-あいうえお

slugify(‘abc葡萄’, allow_unicode=True)
#abc葡萄

slugify(‘abc         葡萄’, allow_unicode=True)
# abc-葡萄