2017-04-24 216 views
1

我試圖使用Hashids,它在我手動輸入要編碼的數字時起作用,但如果嘗試從每個表中對主鍵進行編碼行。從數據庫獲取主鍵(Python/Django)

models.py

from hashids import Hashids 
from django.db import models 

class AddToDatabase(models.Model): 

    hashids = Hashids() 
            # hasids.encode(123) works correctly 
    slug = models.CharField(default=hashids.encode(pk), max_length=12) 

上面說PK是不確定的,不管是什麼我嘗試導入。

+0

Ÿ需要重寫模型保存方法能夠使廢料場等於PK –

回答

1

你現在不能做你正在嘗試的事情(因爲pk只會在INSERT操作後才能獲得值)。一種選擇是

class AddToDatabase(models.Model): 
    hashids = Hashids() 
    slug = models.CharField(max_length=12) 

    def save(self, *args, **kwargs): 
     super(AddToDatabase, self).save(*args, **kwargs) 
     self.slug = self.hashids.encode(self.pk) 
     super(AddToDatabase, self).save(*args, **kwargs) 
+0

哦,這是有道理的,但它給我一個錯誤:'NoneType'對象沒有屬性'slug'' – Liam

+0

檢查更新的答案請 – itzMEonTV

0

另一種解決方案是計算hashid需求

class AddToDatabase(models.Model): 

    @property 
    def slug(self): 
     hashids = Hashids() 
     return hashids.encode(self.pk)