このサイトは、只今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

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

イベント

2025.01.24

アーキテクチャConference 2024に参加してきました。

イベント

2024.11.28

Mac minicomでシリアル通信を行う

電子工作

2024.11.21

Mac 容量足りない問題は、外付けSSDで快適に解決!おすすめ外付けSSD

mac

2024.10.16

Z80エミュレータ- EMUZ80の組み立て

電子工作

2024.10.13

Mac VSCodeで、SFML C++開発環境を作る。

C++

2024.09.09

Rust-SDL2 examplesをすべて試す

Rust

2024.09.01

JavaScriptで、DOMを放り投げる処理

JavaScript

2024.07.27

Rustで創る MOS 6502 CPU その2

Rust

2024.07.23

Rustで創る MOS 6502 CPU その1

Rust

2024.07.19

汎用 3D mesh/model viewerを求め。と、簡単に、FBXファイルをglTF(glb)に変換ツールを求め。

C++

2024.06.06

M1 Macで、OpenGL GLUTを使ってコンパイルする

C

2024.04.27

RANKING

Follow

SPONSOR

現在、掲載募集中です。



Links

About Us

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

Entry Profile

Graphical FrontEnd Engineer
- Daisuke Takayama

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

FOLLOW US