get_field_display() 保存后没有 return 字符串

get_field_display() does not return string after saving it

在此我的(简化)情况。当我将一个选择字段从一个更改为另一个时,我想记录一条消息说

"Field changed from (previous) to (new)"

在括号中,我想要字段的实际标签,因此在下面的示例中应该是 "Field changed from Open to Completed"。但是,出于某种原因,我只能生成

"Field changed from Open to 2"

鉴于我使用完全相同的代码,我很困惑为什么会发生这种情况。有什么想法吗?

class Task(Record):

    class Status(models.IntegerChoices):
        OPEN = 1, "Open"
        COMPLETED = 2, "Completed"
    status = models.IntegerField(choices=Status.choices, db_index=True, default=1)

那么在我看来我尝试这样做:

    if request.POST["status"] == 2:
        description = "Status changed from " + info.get_status_display() + " → "
        # This works fine, returning "Status changed from Open → "
        info.status = request.POST.get("status_change")
        info.save()
        description = description + str(info.get_status_display())
        # Yet for some reason this fails, and I end up with an integer (2)! even though I use the same syntax

保存模型时,不会重新初始化其模型状态。在大多数情况下,这工作得很好,但准确地说:from_db_value() 不适用于字段,这是将您刚提交的原始数据转换为您习惯的表示格式所必需的。

调用模型的 refresh_from_db() 会触发从数据库重新加载模型,进而为每个字段调用 from_db_value