Django ORM条件过滤器LIKE CASE WHEN THEN

时间:2018-02-26 06:27:22

标签: python django orm

我使用的是Django 1.11,Postgresql 9.2,python 3.4

如果事件类型为,我想根据表格列event_type选择数据,然后比较应该是相同日期的日期(今天' s) date else选择给定(今天' s)日期的所有日期,类型为重复出现

但是我们无法使用单一查询来管理这个问题吗?就像我们在聚合中CASEWHENTHEN一样?我尝试使用Q对象,但没有运气。 我想检查价值何时是单一的'然后添加条件,否则另一个条件。

我找不到任何好的解决方案,目前我已经使用this

取得了成功
today = datetime.date.today().strftime('%Y-%m-%d')
single_events = crm_models.EventsMeta.objects.filter(
    event_type == "single",
    repeat_start=today
)

recurring_events = crm_models.EventsMeta.objects.filter(
    event_type == "recurring"
    repeat_start__lte=today
)

all_events = single_events | recurring_events

有关详细信息,我的模型是:

class EventsMeta(models.Model):
    event_type = models.CharField(max_length=50, choices=(("single","Single"),("recurring","Recurring")), 
                            null=False, blank=False,default='single',verbose_name="Event Type")
    repeat_start = models.DateTimeField()
    repeat_end = models.DateTimeField()

2 个答案:

答案 0 :(得分:1)

您可以将许多Q对象与()个符号组合在一起。我是你的情况,我认为这样可行:

single_events = crm_models.EventsMeta.objects.filter(
    (Q(event_type="single") & Q(repeat_start=today)) |
    (Q(event_type="recurring") & Q(repeat_start__lte=today))
)

答案 1 :(得分:0)

使用它: -

today = datetime.date.today().strftime('%Y-%m-%d')
single_events = crm_models.EventsMeta.objects.filter(
    event_type__in = ["single", "recurring"]
    repeat_start=today
)
相关问题