Перевод сообщений журнала администратора django
У меня есть небольшое приложение django mezzanine в https://github.com/miettinj/mezzanine Оно правильно переводит интерфейс администратора, но оно также должно переводить историю страниц в понятную форму. (Я предполагаю, что она поступает непосредственно из 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', оставлял имена полей неизменными и полностью удалял непривлекательные символы: ("[{\)
?
Во вложении строки, обведенные синим цветом, являются правильными, а строки, обведенные знаком read, являются текущей функциональностью.
Возможно, я поздно спохватился, но недавно у меня возник тот же вопрос.
Прежде всего, вы сначала показываете json (, который также является dict в python), который может быть легко разобран в 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": ["Содержание", "Ключевые слова"]}}]
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": ["Содержание", "Ключевые слова"]}}]
Окончательный разбор
Теперь, либо вы берете весь JSON-файл и разбираете его, чтобы взять "change_message", либо вы берете непосредственно "change_message" из LogEntry, тогда вам нужно будет дополнительно разобрать его и определить отображение, которое вы хотите. Вы можете сделать, например, так:
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)
На выходе получаем: Изменения: Содержание, Ключевые слова