[Django]-How to filter a queryset using a function in Django?

6👍

✅

You need a custom model manager which works across the model. Functions that you define inside model classes only work on model instances.

You are already using the default model manager objects when you use model classes; you’ll just write another one with your custom filter.

# First, define a manager subclass
class PublishedLastWeekManager(models.Manager):
    def get_queryset(self):
        now = timezone.now()
        start = now - datetime.timedelta(days=7)
        return super(PublishedLastWeekManager, self).get_queryset().filter(published_date__range=[start, now])

class Article(models.Model):

    objects = models.Manager() # The default manager.
    published_last_week = PublishedLastWeekManager() # New manager

Now, you can do things like:

Article.published_last_week.all()

Leave a comment