Skip to content
Snippets Groups Projects
Commit 2dcc52e1 authored by Nik | Klampfradler's avatar Nik | Klampfradler
Browse files

Merge branch '274-show-what-was-changed-in-crud_events-html' into 'master'

Resolve "Show what was changed in crud_events.html"

Closes #274

See merge request AlekSIS!277
parents 887ac243 366eafcf
No related branches found
No related tags found
1 merge request!277Resolve "Show what was changed in crud_events.html"
Pipeline #2342 failed
{% load i18n %}
{% load i18n data_helpers %}
<ul class="collection">
{% for event in obj.crud_events %}
{% if no_m2m and event.event_type == event.M2M_CHANGE or event.event_type == event.M2M_CHANGE_REV %}
{% else %}
<li class="collection-item">
{% if event.event_type == event.CREATE %}
{% blocktrans with person=event.user.person %}
Created by {{ person }}
{% endblocktrans %}
{% elif event.event_type == event.UPDATE %}
{% blocktrans with person=event.user.person %}
Updated by {{ person }}
{% endblocktrans %}
{% elif event.event_type == event.DELETE %}
{% blocktrans with person=event.user.person %}
Deleted by {{ person }}
{% endblocktrans %}
{% elif event.event_type == event.M2M_CHANGE %}
{% blocktrans with person=event.user.person %}
Updated by {{ person }}
{% endblocktrans %}
{% elif event.event_type == event.M2M_CHANGE_REV %}
{% blocktrans with person=event.user.person %}
Updated by {{ person }}
{% endblocktrans %}
{% endif %}
<strong>
{% if event.event_type == event.CREATE %}
{% blocktrans with person=event.user.person %}
Created by {{ person }}
{% endblocktrans %}
{% elif event.event_type == event.UPDATE %}
{% blocktrans with person=event.user.person %}
Updated by {{ person }}
{% endblocktrans %}
{% elif event.event_type == event.DELETE %}
{% blocktrans with person=event.user.person %}
Deleted by {{ person }}
{% endblocktrans %}
{% elif event.event_type == event.M2M_CHANGE %}
{% blocktrans with person=event.user.person %}
Updated by {{ person }}
{% endblocktrans %}
{% elif event.event_type == event.M2M_CHANGE_REV %}
{% blocktrans with person=event.user.person %}
Updated by {{ person }}
{% endblocktrans %}
{% endif %}
</strong>
<div class="left" style="margin-right: 10px;">
{% if event.event_type == event.CREATE %}
......@@ -43,6 +45,17 @@
<div class="right">
{{ event.datetime }}
</div>
{% parse_json event.changed_fields as changed_fields %}
{% if changed_fields %}
<ul>
{% for field, change in changed_fields.items %}
{% verbose_name "homework" "assignment" field as verbose_name %}
<li>
{{ verbose_name }}: <s>{{ change.0 }}</s> → {{ change.1 }}
</li>
{% endfor %}
</ul>
{% endif %}
</li>
{% endif %}
{% endfor %}
......
from typing import Any
import json
from typing import Any, Optional, Union
from django import template
from django.contrib.contenttypes.models import ContentType
register = template.Library()
......@@ -16,3 +18,24 @@ def get_dict(value: Any, arg: Any) -> Any:
return value[int(arg)]
else:
return None
@register.simple_tag
def verbose_name(app_label: str, model: str, field: Optional[str] = None) -> str:
"""Get a verbose name of a model or a field by app label and model name."""
ct = ContentType.objects.get(app_label=app_label, model=model).model_class()
if field:
# Field
return ct._meta.get_field(field).verbose_name.title()
else:
# Whole model
return ct._meta.verbose_name.title()
@register.simple_tag
def parse_json(value: Optional[str] = None) -> Union[dict, None]:
"""Template tag for parsing JSON from a string."""
if not value:
return None
return json.loads(value)
from aleksis.core.templatetags.data_helpers import get_dict
import json
import pytest
from aleksis.core.templatetags.data_helpers import get_dict, parse_json, verbose_name
pytestmark = pytest.mark.django_db
def test_get_dict_object():
......@@ -24,3 +30,24 @@ def test_get_dict_invalid():
_foo = 12
assert get_dict(_foo, "bar") is None
def test_verbose_name_model():
assert verbose_name("core", "person") == "Person"
def test_verbose_name_field():
assert verbose_name("core", "person", "first_name") == "First Name"
def test_parse_json_json():
foo = {"foo": 12, "bar": "12", "baz": []}
foo_json = json.dumps(foo)
assert parse_json(foo_json) == foo
assert parse_json("{}") == {}
def test_parse_json_empty():
assert parse_json(None) is None
assert parse_json("") is None
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment