【发布时间】:2016-10-09 04:39:48
【问题描述】:
我有一个 Q 对象来查询我的数据库,它的工作方式如下:
class EventSearchManager(models.Manager):
q_objects = []
terms = [term.strip() for term in search_terms.split()]
today = date.today()
if timeselect == "Today":
first_day = today
last_day = None
for term in terms:
search = (
Q(name__icontains=term) |
Q(tags__label__icontains=term),
)
if first_day is not None:
operators.update({'start_date__gte': first_day})
if last_day is not None:
operators.update({'start_date__lte': last_day})
q_objects.append(Q(*search, **operators))
qs = self.get_queryset()
return qs.filter(reduce(operator.or_, q_objects))
它运作良好,但我刚刚重构了事件,以便 start_date 存在于单独的 EventInstance 模型中(这样一个事件可以有无限数量的开始日期)。
现在我想调整此搜索以返回 Event 对象,以便 operators.update({'start_date__gte': first_day}) 引用所有关联 EventInstance 对象的 start_date。我可以进行简单的语法调整,还是需要完全重建这个过程?还是我对 Q 对象的要求太高了?
这是我建立关系的 EventInstance 模型:
class EventInstance(models.Model):
event = models.ForeignKey(Event)
start = models.DateTimeField()
duration = models.TimeField()
recurring = models.CharField(max_length=2)
【问题讨论】: