Мне нужно вывести список произведений, выполненных исполнителем. Одна и та же работа может выполняться несколько раз и в двух разных типах событий (например, модели performanceOfWork
и Event
).
class Work(models.Model):
title = models.CharField(max_length=200) # max_length = required
class performanceOfWork(models.Model):
solo_performer = models.ManyToManyField(Profile)
performed = models.ForeignKey('Work', on_delete=models.CASCADE)
class Event(models.Model):
solo_performer = models.ManyToManyField(Profile)
repertoire = models.ManyToManyField(Work, blank=True)
В представлении мне удалось получить различные значения для каждого из двух моделей:
context['repertoire_from_works'] = performanceOfWork.objects.filter(solo_performer=self.get_object().id).values('performed__title').distinct()
context['repertoire_from_events'] = Event.objects.filter(solo_performer=self.get_object().id).values('repertoire__title').distinct()
Но тогда как мне справиться с одной и той же работой, выполняемой в обеих моделях? Я просто хочу вывести его один раз. Это очень неудобная попытка (которая не работает, потому что она проверяет оба значения в одном вложенном l oop):
<ul>{% for work_works in repertoire_from_works.all %}
{% for work_events in repertoire_from_events.all %}
{% if work_works.performed__title == work_events.repertoire__title%}
{% if forloop.first %}
<li>{{ work_works.performed__title }}</li>
{% endif %}
{% else %}
<li>{{ work_events.repertoire__title }}</li>
<li>{{ work_works.performed__title }}</li>
{% endif %}
{% endfor %}
{% endfor %}
</ul>