Django模型过滤器基于布尔字段



我有一个用户模型,它有这样的字段,

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字段将具有日期。我想我可以解释。

我想要的是基于一些DATEis_active字段来查询用户集。

更清楚地说,我想得到(activejoined_date小于或等于当前日期(和(不是activeresigned_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,
),
)

相关内容

  • 没有找到相关文章

最新更新