我正在使用DJango 1.10,并拥有此模型
from django.contrib.auth.models import User
class ClientStatusHistory(models.Model):
client = models.ForeignKey(to=User, related_name="status_history")
date = models.DateTimeField(auto_now_add=True, db_index=True)
status = models.BooleanField(db_index=True)
该表记录用户被标记为活动或非活动的时间。
我想选择在给定日期有效的用户列表。
如何使用django ORM执行此操作?
对不起,问题措辞不当;基本上我写这样的功能:
get_users_active_on_date(date_value)
这是一个简单的例子: 假设我的系统只有一个用户ID为Id 1.用户从1月1日到20日活跃。然后在3月20日,他被标记为不活跃。 5月15日,他再次活跃起来。
因此,该表将有3个条目:
(1, Jan 1st, True),
(1, Mar 20th, False),
(1, May 15th, True)
因此,如果我查询3月1日的日期,它应该返回我[1],因为用户1在此期间处于活动状态。
然而,如果我查询3月30日,它应该返回我[],因为用户处于非活动状态。
答案 0 :(得分:-1)
据我了解,您要求的内容可以这样做:
today = timezone.now().date()
result = ClientStatusHistory.objects.filter(date__date=today, status=True).values_list('id', flat=True)
但是有了先进的'像这样的查询,在Django Querysets and Managers的帮助下这样做会很有用,特别是如果您要在多个地方使用它(DRY!:):
class ClientStatusHistoryQuerySet(models.QuerySet):
def users_active_on_date(self, d):
return self.filter(date__date=d, status=True).values_list('id', flat=True)
class ClientStatusHistory(models.Model):
...
objects = ClientStatusHistoryQuerySet.as_manager()
...
today = timezone.now().date()
result = ClientStatusHistory.objects.users_active_on_date(today)