Django管理员在保存之前默认随机ID更改

时间:2014-10-29 23:49:53

标签: django django-admin

我有以下模型定义:

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.

如果删除readonly对象的admin.ModelAdmin属性,hashid在输入中(我显然不希望如此),但是如果是真实的那么建议的值{ {1}}新对象。

如何在第一次实例化对象(创建表单)时生成只读hashid,并确保它确实是在保存时使用的那个?

除此之外的问题是我无法使用内联表单集,因为pk在保存时更改了!

1 个答案:

答案 0 :(得分:1)

您可以覆盖表单上的admin表单和与此答案类似的表单上的只读值。 https://stackoverflow.com/a/325038/1637351

Docs关于管理员的表单。

根据您设置的文档,如下所示:

class ActAdmin(admin.ModelAdmin):
    form = ActForm