このサイトは、只今WEB業界で活躍中のデザイナー、プログラマーの方々の情報を集めたweb統合情報サイトです。

Archives Details

Django (DRF)で、ユーザーのモデルを作成時にハッシュidを別で保存する。

Python

2020.09.10

この記事は最終更新日から1年以上が経過しています。

どもです。

Django扱っていると、「あれ、これどうやるんだっけ」と思ってネットで調べたりするのですが、

どうも、 Django (DRF)の情報がネット上に少ない印象。

ちょっとハマったのが、表題であるように、「ユーザーのモデルを作成時の一度だけ(最初)にハッシュidを別で保存する」と言うことをやりたいが、はてどうやるのだろうと。

よくヒットしたやり方がこの様な感じとか、

class CustomUser(AbstractUser):
    hashid = HashidField(null=True, blank=True)

    def save(self, *args, **kw):
        self.hashid = self.id
        return super(CustomUser, self).save(*args, **kw)

とか、

class Article(models.Model):
    hashid = models.CharField(...)

    def save(self, *args, **kwargs):
        super(Article, self).save(*args, **kwargs)
        self.hashid = hashids.encode(self.id)
        super(Article, self).save(*args, **kwargs)

だが、

どうも上手くいかない。

そもそも、ハッシュ化する為に、django-hashid-fieldを使用している。

こやつ、なかなか良い感じのライブラリで、通常ならこの様な形でidをハッシュ化したりするのですが、

class Author(models.Model):
    id = HashidAutoField(primary_key=True)
    name = models.CharField(max_length=40)

当方では、django-allauth(django rest auth)を使用しているので、id(pk)をオーバーライドする様な形だとライブラリ側でエラーが出てややこしい。

あとloopにハマったりしてエラーが出る。どうしたものか。

で、最終的に落ち着いたのが、このやり方。

class CustomUser(AbstractUser):
    hashid = HashidField(null=True, blank=True)

@receiver(post_save, sender=CustomUser)
def hashid_update(sender, instance, created, **kwargs):
    if created:
        instance.hashid = instance.id
        instance.save()

receiverのアノテーションを利用して、新規作成のpost時に一度だけ実行することが出来た。

色々と、探すことが多いのでメモ程度にと。

Comment

Related Article

【M1 Mac】Python ScrapyがImportErrorで大ハマリ。lxmlなど環境作成し対応した件。

2023.05.24

Django (DRF)で、ユーザーのモデルを作成時にハッシュidを別で保存する。

2020.09.10

macOS pyenv環境でtkinterが動かないので、再度インストール

2020.08.09

Django django-rest-auth + Nuxt.js auth-module で作る SPA JWT OAuth ログインシステム その3

2020.06.14

Django django-rest-auth + Nuxt.js auth-module で作る SPA JWT OAuth ログインシステム その2

2020.06.08

Django django-rest-auth + Nuxt.js auth-module で作る SPA JWT OAuth ログインシステム その1

2020.06.07

Django django-allauthで、サクッとソーシャルログイン機能を実装

2020.04.12

PythonでGUIアプリ開発「PyQt」を使った感想

2019.07.18

CATEGORY LIST

LATEST NEWS

Rustでつくる ふっかつのじゅもん

Rust

2025.04.29

Tauri(Rust) × AI で作る GitGUIクライアントアプリ その5

Rust

2025.04.14

う、動くぞ! Mac mini Apple M4 Pro で PS3ソフトを遊ぶ。RPCS3 Mac版を起動

Game

2025.04.12

Tauri(Rust) × AI で作る GitGUIクライアントアプリ その4

Rust

2025.04.10

Tauri(Rust) × AI で作る GitGUIクライアントアプリ その3

Rust

2025.04.08

Tauri(Rust) × AI で作る GitGUIクライアントアプリ その2

Rust

2025.04.07

時代を先取りし過ぎた ニューラルネットワークが導入されたゲーム『がんばれ森川君2号』を令和に嗜んでみる。

Game

2025.04.06

Tauri(Rust) × AI で作る GitGUIクライアントアプリ その1

Rust

2025.04.05

keyring-rsで、Macのキーチェーンに登録する。

Rust

2025.04.04

RustとWebAssemblyによるゲーム開発 Webpack5対応

Rust

2025.03.27

Rustで創る MOS 6502 CPU その3 (Cursorと共に)

Rust

2025.02.24

あけましておめでとうございます(24日経過)

イベント

2025.01.24

RANKING

Follow

SPONSOR

現在、掲載募集中です。



Links

About Us

WEBデザイナーの、WEBデザイナーによる、WEBデザイナーの為のサイト。「みんなで書こう!」と仲間を募ってみたが、結局書くのは自分だけとなってしまいました。日々のメモを綴っていきます。

Entry Profile

Graphical FrontEnd Engineer
- Daisuke Takayama

MAD CITY 北九州市で生まれ育つ。20代はバンド活動に明け暮れ、ふと「webデザイナーになりたい。」と思い、デジタルハリウッド福岡校入学。卒業後、数々の賞を受賞、web業界をざわつかせる。
現在、主に、ゲーム制作中心に港区六本木界隈で活動中。

FOLLOW US