我有一个用户模型,它有这样的字段,
is_active = models.BooleanField()
date_joined = models.DateTimeField(auto_now_add=True)
resigned_date = models.DateTimeField(blank=True, null=True)
其中,如果is_active
字段为True
,则resigned_date
将为None
。如果is_active
字段是False
,则resigned_date
字段将具有日期。我想我可以解释。
我想要的是基于一些DATE
和is_active
字段来查询用户集。
更清楚地说,我想得到(active
和joined_date
小于或等于当前日期(和(不是active
和resigned_date
大于当前日期(的员工列表
到目前为止我写的查询:
users = user_models.User.objects.filter(
Q(
is_active=True,
date_joined__month__lte=month,
date_joined__year__lte=year,
)
& Q(
is_active=False,
resigned_date__month__gt=month,
resigned_date__year__gt=year,
)
)
但这是行不通的。它不会返回任何用户。
我怎样才能做到这一点?
感谢
我已经用下面的方法做到了这一点:
all_users = user_models.User.objects.filter(
branch_id=branch_id,
date_joined__month__lte=month,
date_joined__year__lte=year,
)
active_users = all_users.filter(
is_active=True,
)
inactive_users = all_users.filter(
is_active=False,
resigned_date__month__gt=month,
resigned_date__year__gte=year,
)
users = list(chain(active_users, inactive_users))
如果使用单一查询
users = user_models.User.objects.filter(
Q(
branch_id=branch_id,
date_joined__month__lte=month,
date_joined__year__lte=year,
),
Q(is_active=True)
| Q(
resigned_date__month__gt=month,
resigned_date__year__gte=year,
),
)