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
。
在此我的(简化)情况。当我将一个选择字段从一个更改为另一个时,我想记录一条消息说
"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
。