2017-04-24 147 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)