0

I have a template tag that returns a list of shows:

def get_all_shows():

allshows = Shows.objects.all().order_by("-broadcast_day", "-broadcast_time")[:9].reverse()
tags = Shows.tags.all()
return {'allshows': allshows, 'tags': tags}

In my models have a day choice field:

class Shows(models.Model):
CHOICES = (
    ('Monday', 'Monday'),
    ('Tuesday', 'Tuesday'),
    ('Wednesday', 'Wednesday'),
    ('Thursday', 'Thursday'),
    ('Friday', 'Friday'),
    ('Saturday', 'Saturday'),
    ('Sunday', 'Sunday'),

)
broadcast_day = models.CharField(default=1,max_length=12, choices=CHOICES, blank=True)
broadcast_time = models.TimeField(default=datetime.now, blank=True)

My question is how do I order my list by day so the nearest day will show the corresponding show?

And also is it possible to calculate the date on that day?

Thanks.

phyichai
  • 45
  • 7

1 Answers1

0

if i understanded your question correctly you need to use Django Custom Model Manager:
in Models.py:

class ShowManager(models.Manager):
    def my_custom_method(self):
         #some customizations !
         return super(ShowManager, self).my_custom_method().filter(#some filters here)

class Show(models.Model):
       CHOICES = (
         ('Monday', 'Monday'),
         ('Tuesday', 'Tuesday'),
         ('Wednesday', 'Wednesday'),
         ('Thursday', 'Thursday'),
         ('Friday', 'Friday'),
         ('Saturday', 'Saturday'),
         ('Sunday', 'Sunday'),

         )
       objects = models.Manager()
       my_customization = ShowManager()
       broadcast_day = models.CharField(default=1,max_length=12, choices=CHOICES, blank=True)
       broadcast_time = models.TimeField(default=datetime.now, blank=True)

now you can use , Show.my_customization ! (like Show.objects.all() ) in your view !

Iman Mirzadeh
  • 12,710
  • 2
  • 40
  • 44