Django: фильтр по последним () с обратным внешним ключом - PullRequest
0 голосов
/ 05 июля 2018

Я пытаюсь сделать следующее get_queryset более эффективным, но я не уверен, как туда добраться.

Мне нужен список посещений, каждое из которых является первым для пользователя. Следующее работает, но ужасно неэффективно:

models.py:

class User(models.Model):
    ...


class Visit(models.Model):
    user = models.ForeignKey(User, related_name='visit_set')

    class Meta:
        get_latest_by = 'date'
    ...

views.py

class SomeListView(ListView):

    # Get a queryset of visits, each is a first() for a user.
    def get_queryset(self):
        users = User.objects.filter(visit_set__isnull=False)
        visit_ids = [u.visit_set.earliest().id for u in users]
        return Visit.objects.filter(id__in=visit_ids)

Как я могу выполнить этот запуск, не обращаясь к базе данных для каждого пользователя?

...