날짜 범위 내에서 발생하는 모든 이벤트를 선택하려면 장고에 쿼리 문을 작성하는 방법을 알아 내려고합니다. 이벤트에는 하나 이상의 Schedule 개체를 가리키는 ManyToMany
필드 schedules
이 있습니다. 기본적으로는 다음과 같습니다Django에서 날짜 범위 내의 이벤트 선택
class Event(models.Model):
name = models.CharField(max_length=255)
schedules = models.ManyToManyField(Schedule)
class Schedule(models.Model):
from_date = models.DateTimeField(default="1970-01-01", blank=True)
to_date = models.DateTimeField(default="1970-01-01", blank=True)
class Meta:
ordering = ('from_date', 'to_date',)
그래서 이벤트는 다음과 같이 많은 예약 된 경우를 가질 수있다 : 나는 schedule (3)
같은 일정 event1
같은 이벤트가있는 경우
Event | from_date | to_date
----------------------------------
event1 | 2013-01-01 | 2013-01-02 (1)
| 2013-01-04 | 2013-01-07 (2)
| 2013-01-01 | 2013-04-30 (3)
event2 | 2013-01-01 | 2013-01-03 (4)
| 2013-01-02 | 2013-01-10 (5)
| 2013-02-10 | 2013-04-15 (6)
...
, 나는 해당 이벤트를 싶습니다 2 월 필터를 사용하여 반환 할 수 있습니다. 이 경우 schedule (6)
이 있으므로 event2
도 반환해야합니다.
이 내가 이러한 이벤트를 선택하려고하는 방법입니다 : (2013-02-01,2013-02-28)
을 :이 같은 날짜 범위 2 월에 발생하는 모든 이벤트를 필터링 할 때
events = Event.objects.filter(
Q(schedules__from_date__gte=from_date) &
Q(schedules__to_date__lte=to_date))
events = events.distinct()
이 나에게 정확한 결과를 제공하지 않습니다.
어떤 도움이 크게 감사합니다, 감사합니다.
아, awesomeness. 왜/어떻게 작동하는지에 대한 설명을 해주실 시간이 있으시면 그 부분을 듣고 싶습니다. :) – span
설명을 주셔서 감사합니다. 더 자세히 설명 할 필요가 없습니다. 그것은 지금 명백하다! – span