1

我正在尝试使用Hashids,它在我手动输入要编码的数字时起作用,但如果我试图让它对每个表行的主键进行编码,它就不起作用。

模型.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 是未定义的,无论我尝试导入什么。

4

2 回答 2

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)
于 2017-04-24T09:37:57.170 回答
0

另一种解决方案是hashid按需计算

class AddToDatabase(models.Model):

    @property
    def slug(self):
        hashids = Hashids()
        return hashids.encode(self.pk)
于 2017-04-24T09:40:13.153 回答