【问题标题】:Django - Objects for business hoursDjango - 工作时间的对象
【发布时间】:2012-08-31 13:52:03
【问题描述】:

我正在尝试对公司一周的工作时间进行建模。这是我的尝试:

class Company(models.Model):
    name = models.CharField(max_length=100)
    logo = models.FileField(upload_to='company_logos')
    mon_start = models.TimeField()
    mon_end = models.TimeField()
    tue_start = models.TimeField()
    tue_end = models.TimeField()
    wed_start = models.TimeField()
    wed_end = models.TimeField()
    thu_start = models.TimeField()
    thu_end = models.TimeField()
    fri_start = models.TimeField()
    fri_end = models.TimeField()
    sat_start = models.TimeField()
    sat_end = models.TimeField()
    sun_start = models.TimeField(blank=True)
    sun_end = models.TimeField(blank=True)

这看起来正确吗?

难道没有更动态的方式来定义它吗?

我可以轻松地验证每一天(在表单上)吗?

【问题讨论】:

标签: django django-models django-forms


【解决方案1】:

根据@lyapun 的建议,我可以接受的解决方案是:

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


class Company(models.Model):
    name = models.CharField(
        max_length=100
    )
    logo = models.FileField(
        upload_to='company_logos'
    )



class OpeningHours(models.Model):
    store = models.ForeignKey(
        Company
    )
    weekday = models.IntegerField(
        choices=WEEKDAYS,
        unique=True
    )
    from_hour = models.TimeField()
    to_hour = models.TimeField()

【讨论】:

  • 我想你想在商店和工作日做 unique_together,而不是仅仅在工作日。
  • 没错,其实是unique_together=(weekday, store)
  • Django 1.8 中的 [1]DurationField() 会更好地替代 to_hour。考虑到有时商店可能会在凌晨 12 点后关门?这样任何一天的关闭时间是从_小时+特定日期的持续时间?这是一个好方法吗? [1]:docs.djangoproject.com/en/1.8/ref/models/fields/#durationfield
  • 对于中午打烊的业务,不能设置unique=true
猜你喜欢
  • 2015-03-14
  • 2018-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-28
  • 2013-11-05
  • 2021-10-06
  • 2016-12-09
相关资源
最近更新 更多