【发布时间】:2018-07-03 12:54:33
【问题描述】:
如何过滤计算字段的值可以根据同一模型中的两个模型字段的组合来确定?
Models.py
class Job(models.Model):
start_time = models.DateTimeField(auto_now_add=True)
end_time = models.DateTimeField(null=True)
expiry_time = models.DateTimeField(null=True)
is_complete = models.BooleanField(default=True)
def _get_job_status(self):
if self.is_complete is False and self.expiry_time >= now:
return "active"
elif self.is_complete is False and self.expiry_time < now:
return "expired"
else:
return "complete"
job_status = property(_get_job_status)
我想过滤 job_status 字段,该字段可以有 3 个值 active、expired 或 complete。我不能直接在过滤字段中添加job_status字段,那么如何过滤呢?
更新1
根据回复,我的上述解决方案不正确。所以,如果我尝试通过创建两个不同的过滤器来解决这个问题,比如 is_complete 和 is_expired,但我仍然没有找到为 is_complete BooleanFilter 指定查询集的方法。我的 is_complete = True 应该给出条件 (is_complete is False and expiry_time >= now) 的结果,而 Is_complete = False 应该给出条件 (is_complete is False and expiry_time 如何编写此查询?
filters.py
class JobStatusFilter(FilterSet):
is_active = filters.BooleanFilter(name="is_complete")
class Meta:
model = Job
fields = ('is_complete',)
【问题讨论】:
-
您不能直接使用 filter() 来执行此操作。检查这个问题:stackoverflow.com/questions/1205375/filter-by-property
-
我更新了这个问题。请检查更新1
标签: django django-filter