Как сравнить несколько списков по порядку в шаблоне 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 (дней)