2012-08-31 120 views
9

我试图模拟公司一个星期的营业时间。这是我的尝试:Django - 对象营业时间

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) 

这是否正确?

是否有更加动态的方式来定义它?

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

+1

我认为这是一个好主意 - 的http://stackoverflow.com/a/8128427/830941 – lyapun

+0

可能重复[任何现有解决方案来实现Django的“开放时间”](http://stackoverflow.com/questions/8128143/any-existing-solution-to-implement-opening-hours-in-django) –

回答

15

从@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() 
+1

我想你想做unique_together on商店和工作日,而不是仅在工作日。 – byoungb

+0

这是正确的,它实际上'unique_together =(周日,商店)' –

+0

Django 1.8中的[1] DurationField()是否更好地替代to_hour。考虑到有时商店可能在12点以后关闭?这种方式在任何一天的结束时间是from_hour +特定日期的持续时间?这是一个好方法吗? [1]:https://docs.djangoproject.com/en/1.8/ref/models/fields/#durationfield – Pranaysharma