【django】modelの自動採番をuuidや任意のidに変更
当ページのリンクには広告が含まれています。
django
のmodels.Model
で作成されたクラスは特に記載が無ければ、1.2.3のような自動採番形式になります。
任意のコードや、セキュリティを考慮してuuid
などを設定する方法をご紹介します。
Django/DjangoRESTframeworkについて記事まとめ
目次
models.pyの編集
サンプルとして下記のようなクラスを作成しました。
frfrom django.db import models
class Task(models.Model):
status_choices = (
("1","未着手"),
("2", "作成中"),
("3", "完了"),
)
name = models.CharField(max_length=255)
status = models.CharField(max_length=20, choices=status_choices)
「名前」と「ステータス」しか持たないシンプルなものです。
idをuuidに変更
自動採番AutoField
を用いず、uuid
を使用する場合にはUUIDField
を使用します。
また、uuid
をインポートしておきます。
primary_key=True
-
主キーなので
True
を指定 default=uuid.uuid4
-
データーベース保存の際に、ランダムに入ります。
editable=False
-
プライマリーキーを変更されたら困るので
False
にする
from django.db import models
import uuid
class Task(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
status_choices = (
("1","未着手"),
("2", "作成中"),
("3", "完了"),
)
name = models.CharField(max_length=255)
status = models.CharField(max_length=20, choices=status_choices)
これだけで、完了です!
uuid
を使用するメリットは
- idからデータベースのレコード数を推測されない
- 数字のみだと適当なレコードが発見される
- uuidが一意性を持つ
などの点が挙げられます。
任意のコードに変更
利用シーンとしては、もともと別のシステム上でデータを管理していてid
がある場合などは、そのままそのidを使用したい場合などでしょうか。
uuid
の時と同様にフィールドに、primary_key=True
を設定し、作成後にidを編集されたくないのでeditable=False
にします。
おまけで、任意のidにはバリデーションとして英数字のみを受け付ける形式にしてみました。
from django.db import models
from django.core.validators import RegexValidator
alphanumeric = RegexValidator(
r'^[0-9a-zA-Z]*$', 'Only alphanumeric characters are allowed.')
class Product(models.Model):
id = models.CharField(primary_key=True, editable=False,
validators=[alphanumeric])
name = models.CharField(max_length=255)
便利です。
参考
Model field reference | Django documentation | Django
Django-モデルのプライマリキーをUUIDにする | Hodalog
Django学習におすすめの教材
【徹底的に解説!】Djangoの基礎をマスターして、3つのアプリを作ろう!(Django2版 / 3版を同時公開中です)
Djangoの概要から学び、3つのアプリを作る中でフレームワークに対する理解を深めることができます。最後はVPSを使ってウェブサイトを公開していきましょう!Djangoだけではなく、フレームワークをこれから学びたい方にもおススメです。
【Python 3 x Django 2.0】作りながら覚えるDjango
初心者でも安心!DjangoとPython ( Python 3 )を使ったウェブサイト構築の基本を最初の一歩からデプロイまでをステップバイステップで解説。自分のアイディアを世界に発信しよう!
【Python】 Django3で「本当に使える」WEBアプリケーションを開発しよう
GAEへデプロイやCloudSQL、GCSとも連携でき、登録・ログイン機能はもちろん、決済機能、フォーム送信のreCAPTCHA実装もできます。そのほかキャッシュやサイトマップ、マテリアルデザインにも触れ、多数の機能を実装します。
リンク
リンク
リンク
コメント