0
我有以下型号定义:Django管理默认随机ID更改之前保存
def _createHashID():
return uuid.uuid4().hex[:8] # 8 chars OK for < 100k items
class Act(models.Model):
hashid = models.CharField(
'hashid',
max_length=20,
default=_createHashID,
unique=True,
primary_key=True,
help_text="technical identifier")
然而,当我使用管理网站,以便创建Act
项目,如果hashid
值是只读的,产生价值一次生成表单时,在保存Act
对象时重新生成值。这意味着Add an Act
页面将首先出现的标识符,说583a95de
,但我们我打救,它会告诉我:
The act "0b8c2832" was added successfully.
如果如果删除admin.ModelAdmin
对象的readonly
属性,则hashid
处于输入(I显然不希望那样),但建议的值如果是真实的hashid
的新对象。
第一次实例化对象(创建表单)时,如何生成只读hashid
并确保它确实是保存时使用的对象?
超出这个问题的是我不能使用内联formset,因为pk在保存时间被改变!
感谢蒂姆这个很好的答案,可以工作。然而,这将允许用户选择哈希值,因为我们无法控制它没有被修改,就像你链接的问题一样。你有一个想法如何防止? – Zack4 2014-10-30 19:00:07
简而言之,你将无法做到。该值未存储在服务器上。它只会存在于客户端。你也可以有一个隐藏的领域,你可以比较它,但也可以改变。 – schillingt 2014-10-30 19:45:11