目标:获取“自-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]
答案 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)\