我正在尝试在我的网址中使用基数为36的字符串。我编写了一个函数,将一个数字转换为36,使用字母表示高于9的数字。 我试图找到一个好方法来设置字符字段的默认值等于此函数,但我不知道如何将Django默认主键值添加到其中。有什么想法吗?
我想我可以把这样的东西放到我的模型中,但它不起作用:
base_36 = models.TextField(default=convert_base(id, 36))
答案 0 :(得分:1)
你可以:
Override your model's save()
method:
class YourModel(models.Model):
base_36 = models.TextField()
def save(self, *args, **kwargs):
# will assign a value to pk
super(YourModel, self).save(*args, **kwargs)
# convert the pk to base 36 and save it in our field
self.base_36 = convert_base(self.pk, 36)
self.save()
将您的base_36字段变为property
:
class YourModel(models.Model):
@property
def base_36(self):
return convert_base(self.pk,36)
# can call a property just like a field:
# print YourModel.objects.get(pk=1).base_36
答案 1 :(得分:0)
如果我理解正确,你想使用CharField作为主键,需要重新定义django为新对象生成其值的方式。
如果你继续这样做,我认为你的生活会变得复杂。相反,您只能在URL中使用base36标识符,并让您的视图将它们转换为与通常的主键对应的整数,如:
def my_view(request,base32_id):
pk = base32_to_int(base32_id)
obj = Model.objects.get(pk=pk)
...