관련 모델의 데이터에 의해 Q 오브젝트 검색은 다음과 같이 작동합니다 내 데이터베이스 쿼리가 : 그것은 잘 작동장고 내가 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
모델에 존재합니다 (이 경우 이벤트는 시작일이 불명확 할 수 있음).
이제이 검색을 적용하여 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)