Django - 通过关联模型中的数据搜索 Q 对象

Django - Q object search by data in an associated model

我有一个查询我的数据库的 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 模型中(这样一个事件可以有无限数量的开始日期)。

现在我想将此搜索调整为 return 事件对象,以便 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)

Q对象与普通过滤条件完全一样。由于您可以在过滤条件中关注关系,因此您也可以在 Q 中进行。

你没有展示你的模型,但假设这个关系只是被称为 eventinstance,你可以这样做:

operators.update({'eventinstance__start_date__gte': first_day})