0

I have a model for an item, it has a function that tells if the item is still on auction depending on an end date.

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

In a class view i want to filter only those instances where the auction_status is true. Something along the lines of :

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()

But i obviously can not filter based on a function definition. How to workaround this?

2 Answers2

0

With QuerySet you can not filter on property or function of model.

But in your case, you can do like below:

return Catalogue.objects.filter(end_date__lt=timezone.now())
Thành Lý
  • 86
  • 3
0

You could add @property decorator to your auction_status function, but this won't work with Django filters. There are some workarounds discussed here and here.

Luke
  • 965
  • 8
  • 21