我可以获得"自-date以来创建第一个对象的用户数量 - "少于2个查询和1个循环?

时间:2014-05-20 17:05:32

标签: python mysql sql django django-models

目标:获取“自-date-以来创建了第一个对象的用户数量”。在这种情况下,对象是名为“Creation。

的Django模型

有没有比我下面更有效的方式?可能使用Q对象或原始SQL?我在这种情况下使用MySQL。

'''return all users who have created their first Offer since -date-'''
prev_creators = Creation.objects.filter(created__lte=date).values_list('creator', flat=True).distinct()
recent_creators = Creation.objects.filter(created__gte=date).values_list('creator', flat=True).distinct()
return [b for b in recent_creators if b not in prev_creators]

2 个答案:

答案 0 :(得分:2)

我不确定如何将其减少到一个查询,但您可以在第二个过滤器中添加“.exclude”并过滤掉第一个查询返回的创建者。

recent_creators = Creation.objects.filter(created__gte=date).exclude(creator__in=prev_creators).values_list('creator', flat=True).distinct()

答案 1 :(得分:1)

一位同事用更简单的查询帮我解决了这个问题:

from django.contrib.auth import get_user_model

return get_user_model().objects.distinct()\
    .filter(creation__created__gte=date)\
    .exclude(creation__created__lt=date)\