如何创建自定义django模型字段来表示某个地点的开放时间和关闭时间

问题描述:

我有一个关于餐厅的应用程序。您可以设置其开启和关闭时间。我通过添加这样的两个时间字段来做到这一点。如何创建自定义django模型字段来表示某个地点的开放时间和关闭时间

class Place(models.Model): 
    # other fields 
    opening = models.TimeField() 
    closing = models.TimeField() 

但是我想用一个自定义字段来做到这一点。

class Place(models.Model): 
    # other fields 
    operating_hours = models.DualTimeField() 
+0

有你想要什么原因呢?你有支持这种类型的数据库吗?如果不是,那么你将如何将该字段保存到数据库?作为一个varchar?如果是,那么你打算如何查询数据库以查看你的位置何时打开? – Serafeim

+0

原因是餐厅的开放时间和结束时间代表了其中一个物业营业时间。他们不是分开的。这就是为什么我想要这样做。或者,例如,您可能需要最小 - 最大字段。我可以将它们表示为JsonField或其他内容。如果我有你的问题的所有答案,为什么我要在这里发布它? –

+0

我试图让你明白,使用本地不支持你的数据库*的字段会导致问题。将开放时间保存在varchar中可能看起来很聪明,但是当你想知道什么地方打开时会发生什么?或者你想知道如何*许多*地方在凌晨2点开放? – Serafeim

1)使用CharField和通过属性解析模型中的字符串,如 “HH:MM - HH:MM”

2)使用Django的天然DurationField: https://docs.djangoproject.com/en/1.10/ref/models/fields/#durationfield 如果你想模拟开放时间,你需要第二个字段来定义开放时间,它正在处理timedelta。

3)像其他人一样使用两个TimeFields。

4)另一种选择是MultiSelectField,用户可以选择该地点开放的一天中的小时。

OPENING_HOURS = (
    (1,'1am'), 
    (2,'2am'), 
    (3,'3am'), 
    (4,'4am'), 
    ... 
    (12,'12pm'), 
) 

class Place(models.Model): 
    # other fields 
    operating_hours = models.my_field = MultiSelectField(choices=MY_CHOICES) 

参见:https://pypi.python.org/pypi/django-multiselectfield

+0

非常感谢。我打算使用第一个。 –

+0

我认为第四种选择也许会很有趣。 – rollinger

+0

我不这么认为。因为使用此选项,用户将不得不手动选择所有运行时间。 –