Search code examples
djangodjango-queryset

How to get (Parent) objects by filtering its child model?


I have researched some (answer, answer)s but didn't get what I want.
So I have two models:
models.py

class TvProgram(TimeStampedModel):
    name = models.CharField(max_length=512)

class TvProgramSchedule(TimeStampedModel):
    tvprogram = models.ForeignKey(
        to=TvProgram, on_delete=models.CASCADE
    )
    schedule = models.DateTimeField()

I want to get Tvprograms (Parent) which its children's schedules are only for the 7 days, In my case I am getting tvprograms with its all children.

Is there a way to retrieve all the Parent objects that are in the filtered querysets?


Solution

  • I solved the problem like that:

    from django.db.models import Prefetch
    
    yesterday = timezone.now() - timedelta(days=1)
    days_range = [yesterday, yesterday + timedelta(days=8)]
    
    queryset = qs.prefetch_related(
        Prefetch('tvprogramschedule_set', queryset=TvProgramSchedule.objects.filter(schedule__range=days_range).order_by('schedule'))
    ).exclude(tvprogramschedule__lte=0)