Как создать динамическую модель для названий дней недели в расписании? - PullRequest
0 голосов
/ 14 ноября 2018

Для расписания занятий в спортзале мне нужно создать модель, с помощью которой я получу список имен на семь дней.Список будет обновляться ежедневно, поэтому на первом месте всегда будет текущий день недели.Каждый день список будет смещаться на один день, например, в ячейке, в которой слово «среда» стоит сегодня, завтра появится слово «четверг», послезавтра - «пятница» и так далее.Затем имена дней должны быть извлечены в представление и переданы в шаблон.

Я попытался сделать это так:

import calendar
import datetime
from datetime import *
from django.db import models
from django.utils.translation import ugettext as _

class DayOfWeekSchedule(models.Model):
    """General dynamic schedule for a week"""

    DOW_CHOICES = (
        (1, _("Monday")),
        (2, _("Tuesday")),
        (3, _("Wednesday")),
        (4, _("Thursday")),
        (5, _("Friday")),
        (6, _("Saturday")),
        (7, _("Sunday")),
    )
    day_of_week = models.PositiveSmallIntegerField(
        choices=DOW_CHOICES, 
        verbose_name=_('Day of week')
        )

    def days_of_week(self):
        my_date = date.today()
        current_day_name = calendar.day_name[my_date.weekday()]
        index1 = DOW_CHOICES.index(current_day_name) #from Monday=0 (i.e. Friday=4)
        list_daynames = list(DOW_CHOICES[index1:] + DOW_CHOICES)[:7] #list of names, current is first
        list_index = (2, 3, 4, 5, 6, 7, 1) #to compensate systems difference
        list2 = list(list_index[index1:] + list_index)[:7]
        context_days = dict(zip(list_keys, list_daynames))
        return context_days

Но

DOW_CHOICES.index (current_day_name)

и

list_daynames = list (DOW_CHOICES [index1:] + DOW_CHOICES) [: 7]

, как и ожидалось, не работают, поскольку .index () не применим к кортежам этого типа.

А как это сделать, я не знаю.

1 Ответ

0 голосов
/ 14 ноября 2018

Может быть, вы думаете об этом. Если я правильно понимаю, что вы хотите, вы могли бы просто сделать что-то вроде этого:

 from datetime import datetime, timedelta

 days = {
    '1': _('Monday'),
    '2': _('Tuesday'),
    '3': _('Wednesday'),
    '4': _('Thursday'),
    '5': _('Friday'),
    '6': _('Saturday'),
    '7': _('Sunday')
}

DOW_CHOICES = []

today = datetime.today()
for i in range(7):
    day_number = (today + timedelta(days=i)).isoweekday()
    day = days[str(day_number)]
    DOW_CHOICES.append((day_number, day))

Получает текущую дату и создает список кортежей с номером дня и днем. Результат будет:

[
    (3, 'Wednesday'), 
    (4, 'Thursday'), 
    (5, 'Friday'), 
    (6, 'Saturday'), 
    (7, 'Sunday'), 
    (1, 'Monday'), 
    (2, 'Tuesday')
]
...