Как сравнить несколько списков по порядку в шаблоне django

У меня есть модель класса "Educate", которая состоит из таких полей, как название класса, описание класса и учитель, ведущий этот класс. И у меня есть модель класса "История", которая записывается в базу данных всякий раз, когда изменяется содержимое класса "Образование".

Каждый раз, когда учитель, отвечающий за Educate, меняется, это отслеживается в модели класса "История", и то, что я хочу получить, это продолжительность работы каждого учителя.

В модели класса "History" есть поле "summary", в котором хранится содержимое измененных полей. Если я проверю в DB, то оно выглядит так, как показано ниже, а для вывода в виде строки необходимо загрузить формат json из шаблона.

DB: {"field_summary": {"teacher": "\ub...json...9bc -> \ub...json...9c", "contact": "010-1111-1111-> 010-0000-0000"}, "file_summary": {}}

[educate/models.py]

class Educate(models.Model):
    educate_name = models.CharField(max_length=2000, null=True)
    educate_explanation = models.CharField(max_length=2000, null=True)
    teacher = models.ManyToManyField(Contact, related_name="teacher")

    @property
    def history(self):
        history = self.history_set.all().order_by('-create_date')
        for h in history:
            setattr(h, 'summary_json', json.loads(h.summary))
        return history

class History(models.Model):
    educate = models.ForeignKey(Educate, on_delete=models.SET_NULL, null=True, blank=True)
    summary = models.TextField(blank=True, null=True)
    create_date = models.DateTimeField(auto_now_add=True)

    def json(self):
        return {
            'id': self.id,
            'educate': {
                'id': self.educate.id,
                'educate_name': self.educate.educate_name,
                'educate_explanation': self.educate.educate_explanation,
             },
            'summary': self.summary,
            'create_date': self.create_date
        }

[educate/views.py]

def statistic(request):
    educate = Educate.objects.get(id='117')
    return render(request, 'statistic.html', {'educate': educate})

[templatetag.py]

@register.filter
def after_teacher(value):
    split_teacher = re.split('[ -> |/]', value)
    return split_teacher [len(split_teacher ) - split_teacher[::-1].index(''):]

[Шаблон]

{% for h in educate.history %}
  {% if h.summary_json.field_summary.teacher|length > 0 %}
    {{ h.summary_json.field_summary.teacher|after_teacher }}
  {% endif %}
{% endfor %}

Результатом шаблона является:

['Halen', 'Lisa'], Feb. 25 октября 2022, 12:29 ['Halen', 'Kenji'], 12 октября 2021, 9:35 ['Halen'], сент. 23, 2021, 4:02 ['Halen', 'Kenji'], 12 мая 2021, 5:27 ['who'], 12 апреля 2021, 1:18 p.m.

Моя цель - сравнить пять списков, чтобы получить продолжительность работы каждого учителя. Мне очень жаль, что я не могу решить ее уже месяц. Пожалуйста, помогите!

по состоянию на сегодня: 2022-04-12 Хален: 335 (дней) Лиза: 46 (дней) Кенджи: 270 (дней)

Вернуться на верх