我有以下模型定义:
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
在输入中(我显然不希望这样(,但如果是新对象的实际hashid
,则建议的值。
如何在第一次实例化对象时生成只读hashid
(创建表单(,并确保它确实是保存时使用的对象?
除此之外的问题是我无法使用内联表单集,因为 pk 是在保存时更改的!
您可以覆盖管理员的表单和表单上的只读值,类似于此答案。 https://stackoverflow.com/a/325038/1637351
有关管理员表单的文档。
根据文档,您可以这样设置它:
class ActAdmin(admin.ModelAdmin):
form = ActForm