在Django中实现"开放时间"的任何现有解决方案

arn*_*che 6 django django-admin

我正在为一个客户建立一个网站,希望能够改变他每个不同商店的开放时间.Django是否存在针对此类问题的现有解决方案?

ben*_*ing 12

你什么意思?看起来很简单.根据您的工作日订单进行调整.如果您愿意,可以添加验证.但人们应该足够聪明,不需要对这类东西进行验证.

HOUR_OF_DAY_24 = [(i,i) for i in range(1,25)]

WEEKDAYS = [
  (1, _("Monday")),
  (2, _("Tuesday")),
  (3, _("Wednesday")),
  (4, _("Thursday")),
  (5, _("Friday")),
  (6, _("Saturday")),
  (7, _("Sunday")),
]

class OpeningHours(models.Model):
    store = models.ForeignKey("StoreModel")
    weekday_from = models.PositiveSmallIntegerField(choices=WEEKDAYS, unique=True)
    weekday_to = models.PositiveSmallIntegerField(choices=WEEKDAYS)
    from_hour = models.PositiveSmallIntegerField(choices=HOUR_OF_DAY_24)
    to_hour = models.PositiveSmallIntegerField(choices=HOUR_OF_DAY_24)

    def get_weekday_from_display(self):
        return WEEKDAYS[self.weekday_from]

    def get_weekday_to_display(self):
        return WEEKDAYS[self.weekday_to]

class SpecialDays(models.Model):
    holiday_date = models.DateField()
    closed = models.BooleanField(default=True)
    from_hour = models.PositiveSmallIntegerField(choices=HOUR_OF_DAY_24, null=True, blank=True)
    to_hour = models.PositiveSmallIntegerField(choices=HOUR_OF_DAY_24, null=True, blank=True)
Run Code Online (Sandbox Code Playgroud)

  • 为什么不使用`TimeField()? (5认同)
  • 您可以使用get_weekday_from_display和get_weekday_to_display来代替编写get_weekday_from和get_weekday_to方法,如下所述:https://docs.djangoproject.com/en/dev/ref/models/instances/#django.db.models.Model.get_FOO_display (4认同)