代码之家  ›  专栏  ›  技术社区  ›  BottleZero

django:filter by latest(),带反向外键

  •  0
  • BottleZero  · 技术社区  · 7 年前

    我试着做以下事情 get_queryset 效率更高,但我不知道怎么去。

    我需要一个访问列表,每个访问都是用户的第一个访问。以下方法有效,但效率极低:

    模型:

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

    VIEW

    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)
    

    如何在不为每个用户命中数据库的情况下运行此操作?

    0 回复  |  直到 7 年前