👀

Djangoでidをuuidにするときに気をつけること

2021/08/21に公開2

Djangoでidを連番ではなく、uuidにする際に
UUIDFieldのdefaultにuuid.uuid4()と書くとハマる

uuid.uuid4()だとリクエスト毎にuuidが生成されず、1回目はうまく登録できるが2回目移行できなくなる。

解決策として

uuid.uuid4にするだけ

code sample

import uuid
from django.db import models

class Base(models.Model):
    class Meta:
        abstract = True

    id = models.UUIDField(
        primary_key = True,
        default = uuid.uuid4,  ← ここ(uuid.uuid4()これだとダメ)
        editable = False
    )

Discussion

ForestSeoForestSeo

自分もハマりました(笑)

TsubasaRyutoTsubasaRyuto

コメントありがとうございます。🙌

https://docs.python.org/ja/3/library/uuid.html#uuid.uuid4
pythonドキュメントには()ありで書かれているからいけると思ったら

https://docs.djangoproject.com/en/3.2/ref/models/fields/#uuidfield
Djangoドキュメントには()なしでちゃんと書かれているんですよね

これに気づくまでに結構時間を費やしちゃいました😭
(ドキュメントはちゃんと読もうという教訓ですね😁)