Динамический подсчет 'Property' для применимых внешних ключей
В настоящее время в моем приложении есть следующие три модели:
Models.py
class Guest(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
name = models.CharField(max_length=100)
class Event(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
name = models.CharField(max_length=100)
class Invite(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
event = models.ForeignKey(Event, on_delete=models.CASCADE)
guest = models.ForeignKey(Guest, on_delete=models.CASCADE)
На моей индексной странице для модели Event, где я показываю одно событие, я также показываю список всех гостей, которые могут быть добавлены к событию:
guests = Guest.objects.filter(wedding = event.wedding).order_by("tag", "name")
Однако в таблице я хотел бы показать рядом с каждым гостем, сколько приглашений на это конкретное мероприятие он получил.
Хотя я мог бы сделать свойство для гостя, возможно, что несколько гостей могут быть приглашены на несколько мероприятий.
В идеальном мире я бы определил свойство, которое принимает событие в качестве параметра, чтобы я мог сделать что-то вроде этого в шаблоне:
{% for guest in guests %}
{{ guest.name }} ( {{ guest.total_invites(event.id) }}
{% endfor %}
Если я правильно понимаю вашу причину...
Измените метод add для нахождения Event объекта Guest объекта:
class Guest(models.Model):
...
def get_event(self):
return Invite.objects.filter(guest=self).first().event
Затем с помощью простого вызова в шаблоне:
{% for guest in guests %}
{{ guest.name }} ({{ guest.get_event.invite_set.all.count }})
{% endfor %}