Как фильтровать экземпляры Django Model на основе функции, определенной внутри модели?

У меня есть модель для товара, в ней есть функция, которая определяет, находится ли товар еще на аукционе в зависимости от даты окончания.

class Catalogue(models.Model):
    name = models.CharField(max_length=256)
    owner = models.ForeignKey(User, on_delete=models.CASCADE)
    end_date = models.DateTimeField()

    def auction_status(self):
        now = timezone.now()
        return now < self.end_date

В представлении класса я хочу отфильтровать только те экземпляры, где auction_status равен true. Что-то вроде :

class AuctionOverView(ListView):
    model = Catalogue
    template_name = 'administration/catalogue.html'

    def get_queryset(self):
        try:
            return Catalogue.objects.filter(auction_status=False)
        except:
            raise Http404()

Но я, очевидно, не могу фильтровать на основе определения функции. Как это можно обойти?

В QuerySet вы не можете фильтровать по свойству или функции модели.

Но в вашем случае вы можете поступить следующим образом:

return Catalogue.objects.filter(end_date__lt=timezone.now())

Вы можете добавить декоратор @property к вашей функции auction_status, но это не будет работать с фильтрами Django. Есть некоторые обходные пути, обсуждаемые здесь и здесь .

Вернуться на верх