如何在TimeField中存储24小时军事格式时间到Django模型

时间:2017-07-10 23:40:28

标签: python django datetime

我试图将24小时格式的时间存储到Django模型中。我在模型中使用TimeField。到目前为止,当试图以标准的12小时格式存储时间时,它可以工作。 但是当试图以24小时格式存储时间时,它不再起作用,而是给出一个错误,说明给出有效时间。

我的应用程序将积分存储为小时。用户支付他们想要消费的小时数并相应地支付它。然后,我将剩余的积分存储在remaining_session_credits中。当用户注册时,用户输入最大值为24的整数。这意味着用户最多只能使用24小时的积分。这就是为什么我试图在TimeField中存储24个整数。

到目前为止,这是我的代码:

我的模特

session_credits = models.TimeField(blank=True, null=True)
remaining_session_credits = models.TimeField(blank=True, null=True)

我的观点

def save_enrollment(request):
try:
    data = json.loads(request.body.decode("utf-8"), parse_float=decimal.Decimal) if request.body.decode("utf-8") else {}
    if data.get("session_credits", None) is not None:
        data["remaining_session_credits"] = timedelta(hours=data.get("session_credits"))

    return success("Success!")
except Exception as e:
    return HttpResponse(str(e), status=400)

data.get("session_credits")这是一个我转换为小时的整数。例如data.get('session_credits') = 24我希望24为时间格式,并保存在模型中的TimeField中。

2 个答案:

答案 0 :(得分:1)

好的,据我所知,根据用户“消耗”积分的方式,您有两种选择。

如果他从注册时起“订阅”了x个小时,那么您可以只存储订阅到期的时间。您可以根据用户注册的时间和他购买的时间计算此值,并将该值存储在DateTime字段中。然后,如果他的订阅已经过期,您可以检查当前时间。

如果他积极地需要做一些事情来“消费”学分,你如何衡量?这实现起来要困难得多。同样在这种情况下,最好将值存储为整数(IntegerField)或Duration,具体取决于信息的存储准确度。

答案 1 :(得分:-1)

如果您想支持数据的特定格式,例如24小时的milileary风格。将信息转换为文本。您只能使用Django数据格式和Sql平台数据格式。但是,当您以文本格式处理数据时,您可以控制用户界面,并且可以实现所有格式。