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在输入中(我显然不希望这样(,但如果是新对象的实际hashid,则建议的值。

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

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

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

有关管理员表单的文档。

根据文档,您可以这样设置它:

class ActAdmin(admin.ModelAdmin):
    form = ActForm

最新更新