翻译django管理日志条目消息

vh0rcniy  于 2023-08-08  发布在  Go
关注(0)|答案(1)|浏览(145)

我在https://github.com/miettinj/mezzanine中有一个小的django夹层应用程序,它可以正确地翻译管理界面,但它也应该将页面历史转换为可理解的形式。(我猜它直接来自数据库中的django_admin_log)
现在管理日志看起来像这样:

{
  "model": "admin.logentry",
  "pk": 2,
  "fields": {
    "action_time": "2022-11-18T08:34:03.136Z",
    "user": 1,
    "content_type": 18,
    "object_id": "1",
    "object_repr": "janes post",
    "action_flag": 2,
    "change_message": "[{\"changed\": {\"fields\": [\"Content\", \"Keywords\"]}}]"
  }
}

字符串
我怎样才能改变它,使它翻译动作'changed',保持字段名称不变,并完全删除unuserfrienly字符:("[{\)
在附件中,用蓝色包围的行是正确的,用红色包围的行是当前功能。

jtjikinw

jtjikinw1#

我可能会迟到,但我最近也有同样的问题。
首先,你首先展示一个json(在python中也是一个dict),它可以很容易地在python中解析:

{
  "model": "admin.logentry",
  "pk": 2,
  "fields": {
    "action_time": "2022-11-18T08:34:03.136Z",
    "user": 1,
    "content_type": 18,
    "object_id": "1",
    "object_repr": "janes post",
    "action_flag": 2,
    "change_message": "[{\"changed\": {\"fields\": [\"Content\", \"Keywords\"]}}]"
  }
}

字符串
这可以在python中解析,只保留“change_message”字段,将其视为json表示(JSON双解析)或字典表示:

Dict:

data = {
  "model": "admin.logentry",
  "pk": 2,
  "fields": {
    "action_time": "2022-11-18T08:34:03.136Z",
    "user": 1,
    "content_type": 18,
    "object_id": "1",
    "object_repr": "janes post",
    "action_flag": 2,
    "change_message": "[{\"changed\": {\"fields\": [\"Content\", \"Keywords\"]}}]"
  }
}

change_message = data['fields']['change_message']

print(change_message)


输出为:[{“changed”:{“fields”:[“Content”,“Keywords”]}}]

JSON

import json

# Your JSON string
json_str = """
{
  "model": "admin.logentry",
  "pk": 2,
  "fields": {
    "action_time": "2022-11-18T08:34:03.136Z",
    "user": 1,
    "content_type": 18,
    "object_id": "1",
    "object_repr": "janes post",
    "action_flag": 2,
    "change_message": "[{\\"changed\\": {\\"fields\\": [\\"Content\\", \\"Keywords\\"]}}]"
  }
}
"""

# Parse the JSON string into a Python object
data = json.loads(json_str)

# Extract the 'change_message' field
change_message = data['fields']['change_message']

print(change_message)


输出为 [{“changed”:{“fields”:[“Content”,“Keywords”]}}]

最终解析

现在,要么获取整个JSON文件,然后解析它以获取“change_message”,要么直接从LogEntry获取“change_message”,然后需要进一步解析它并定义所需的显示。例如,您可以执行以下操作:

import json

# Your JSON string
json_str = "[{\"changed\": {\"fields\": [\"Content\", \"Keywords\"]}}]"

# Parse the JSON string into a Python object
parsed = json.loads(json_str)

# Extract 'fields' from 'changed' and join with a comma
fields = ', '.join(parsed[0]['changed']['fields'])

output = f"Changed: {fields}"

print(output)


输出为:* 已更改:内容,关键字 *

相关问题