0

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

“字段从(以前)更改为(新)”

在括号中,我想要字段的实际标签,因此在下面的示例中,应该是“字段从打开更改为已完成”。但是,由于某种原因,我只能生成

“字段从 Open 更改为 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
4

1 回答 1

2

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

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

于 2020-06-09T11:52:30.420 回答