Динамический подсчет '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 %}
Вернуться на верх